[英]insertion sort is not outputting right
我的條件沒有輸出正確的數字,列表沒有通過循環改變,這是我的條件。
if (j + 1 <= length)
{
insertionSort(arrayIn, indexIn + 1);
}
}
你可以試試這個:
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] + " ");
}
}
我可以在您的代碼中執行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 + " ");
}
}
Output:
1 2 3 4 5
遞歸調用的條件:
if (j + 1 <= length)
是錯的。
只要indexIn
小於數組的最后一個索引,就應該進行遞歸調用:
if (indexIn < length - 1) {
insertionSort(arrayIn, indexIn + 1);
}
您的代碼的 rest 很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.