您好,我已经用Java完成了插入排序,但是我不知道我是否正确实现了插入排序。有人可以合作吗? 我认为插入排序需要在for循环中包含while循环 因此我实现了这一点,但我不知道它是否正确。
// ------------------------------------------------------------
import java.lang.Math; // headers MUST be above the first class
import java.util.Arrays;
// one class needs to have a main() method
public class Insertionsort {
// arguments are passed using the text field below this editor
public static void main(String[] args) {
// --------------------------------------------- insertion sort
int mainInsersionSortArray[] = {64, 25, 12, 22, 11, 10, 9, 8, 7, 6, 5, 4, 3};
int insertionSortTemporaryValue = 0;
System.out.println("Array before insertion sort");
for (int z = 0; z < mainInsersionSortArray.length; z++) {
System.out.println(mainInsersionSortArray[z]);
}
int x1;
for (int k0 = 1; k0 < mainInsersionSortArray.length; k0++) {
x1 = k0;
while (x1 != 0) {
if (mainInsersionSortArray[x1] < mainInsersionSortArray[x1 - 1]) {
insertionSortTemporaryValue = mainInsersionSortArray[x1];
mainInsersionSortArray[x1] = mainInsersionSortArray[x1 - 1];
mainInsersionSortArray[x1 - 1] = insertionSortTemporaryValue;
}
x1 = x1 - 1;
}
}
System.out.println("\n" + "Array after insertion sort");
for (int z1 = 0; z1 < mainInsersionSortArray.length; z1++) { // integerArray.lenght - looping through the whole array starting from i[0]
System.out.println(mainInsersionSortArray[z1]);
}
}
}
以Java实现的插入排序。
答案 0 :(得分:0)
假设在执行算法的多个步骤之后,对数组的部分A[0:k[
(即排除了k
)进行了排序。在下一步中,我们考虑元素A[k]
,搜索其插入位置并将所有元素移到该位置之后。最好通过保留A[k]
的副本,移动较大的元素并将复制的元素放在正确的位置来一次完成。为避免缓冲区溢出,搜索应在索引0
处停止。
内部循环读取
int Save= A[k];
for ( ; k >= 0 && A[k-1] > Save; k--) // Loop until you can insert
{
A[k]= A[k-1]; // Shift
}
A[k]= Save;
如果A[k]
已经在正确的位置,则稍微好一点的变体可以避免不必要的复制:
if (A[k] <= A[k-1])
{
int Save= A[k];
A[k]= A[k-1]; // Shift
for (k--; k >= 0 && A[k-1] > Save; k--) // Loop until you can insert
{
A[k]= A[k-1]; // Shift
}
A[k]= Save;
}
请注意,k > 0
只能使用它。
现在,外循环只是将排序后的部分A[0..j[
加上
for (j= 1; j < n; j++)
{
k= j;
"Inner loop"
}