我的条件没有输出正确的数字,列表没有通过循环更改,这是我的条件。
if (j + 1 <= length)
{
insertionSort(arrayIn, indexIn + 1);
}
}
答案 0 :(得分:0)
您可以尝试以下方法:
public static void insertionSort(int arrayIn[], int indexIn) {
if (indexIn <= 1)
return;
insertionSort(arrayIn, indexIn - 1);
int last = arrayIn[indexIn - 1];
int j = indexIn - 2;
while (j >= 0 && arrayIn[j] > last) {
arrayIn[j + 1] = arrayIn[j];
j--;
}
arrayIn[j + 1] = last;
}
public static void main(String[] args){
int[] array = {1, 3, 2, 4};
insertionSort(array, array.length);
for (int i = 0; i < array.length; i++){
System.out.print(array[i] + " ");
}
}
答案 1 :(得分:0)
在您的代码中,我可以进行ArrayIndexOutOfBound
操作
而不是
if (j + 1 <= length)
{
insertionSort(arrayIn, indexIn + 1);
}
使用此
if (j + 1 < length)
{
insertionSort(arrayIn, indexIn + 1);
}
您也已经打印了阵列的内容,
public static void main(String[] args) {
int[] arr = new int[]{2, 3, 4, 1, 5};
insertionSort(arr, 0);
for(int i : arr)
{
System.out.print(i + " ");
}
}
输出:
1 2 3 4 5
答案 2 :(得分:0)
递归调用的条件:
if (j + 1 <= length)
错了。
只要indexIn
小于数组的最后一个索引,就应该进行递归调用:
if (indexIn < length - 1) {
insertionSort(arrayIn, indexIn + 1);
}
其余的代码也没问题。