簡體   English   中英

我的插入排序邏輯似乎正確,但不起作用

[英]My logic of insertion sort seems right but does not work

我正在嘗試實現插入排序。

public int[] insertionSort(int[] a) {

    for(int i=0; i<a.length;i++) {
        int j=i+1;

        while(a[j] < a[i] && j < a.length) {
            swap(a[j],a[i]);
            j--;
            i--;
        }
    }
    return a;
}

public void swap(int a, int b) {
    int temp;
    temp = a;
    a = b;
    b = temp;
}

(就輸出結果而言)是否在技術上與我說j = i-1並在條件循環中從j <a.length到j> = 0代替條件相同?

您不能以這種方式交換值,因為參數正在傳遞值,而不是對值的引用。

您最好不要使用單獨的交換方法,例如這樣(還必須增加而不是減少ij值):

public int[] insertionSort(int[] a) {
    int temp;

    for(int i=0; i<a.length;i++) {
        int j=i;

        while(j > 0 && a[j-1] > a[j]) {
            temp = a[j];
            a[j] = a[j-1];
            a[j-1] = temp;
            j--;
        }
    }
    return a;
}

編輯 :必須再次更新-while循環中的條件順序錯誤,因此它將在檢查數組是否到達數組末尾之前查找數組的下一個索引。

編輯2 :如評論中所述,我將展示如何編寫一個實際有效的swap方法-而不是傳遞值,您必須傳遞整個數組並在之后返回它。 我可能仍然建議以上述方式進行此操作,但僅出於教育目的:

public int[] insertionSort(int[] a) {

    for(int i=0; i<a.length;i++) {
        int j=i;

        while(j > 0 && a[j-1] > a[j]) {
            a = swap(a, j-1, j);
            j--;
        }
    }
    return a;
}


public int[] swap(int[] a, int index1, int index2) {
    int temp = a[index1];
    a[index1] = a[index2];
    a[index2] = temp;
    return a;
}

編輯3 :正在做一些愚蠢的事情,還沒有完全確定插入順序。 全部排序(對雙關語表示敬意)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM