2014-05-25 98 views
0
public static void insertionSort(int[] a) { 
    if (a == null || a.length < 2) 
    return; 
    int j; 
    for (int i = 1, temp = a[i]; i < a.length; i++) { 
    for (j = i - 1; j >= 0 && temp < a[j]; a[j + 1] = a[j], j--); 
    a[j + 1] = temp; 
    } 
} 

預計會按升序對int數組進行排序。但是對於輸入數組{ 1, 2 ,3 , 7 , 8 , 6 , 100 , 99 , 98},它給出輸出[1, 2, 2, 2, 2, 2, 2, 2, 2]我應該做些什麼才能完成這項工作

爲什麼此插入排序代碼不能按預期工作?

+2

它做什麼,你期望它做什麼? –

+0

預計按升序對int數組進行排序。對於輸入數組{1,2,3,7,8,6,100,99,98},它給出輸出[1,2,2,2,2,2,2,2,2,2] – Rpant

+0

你試過了嗎?逐步調試您的代碼和/或打印各種變量的值以更好地理解發生了什麼?特別是,這看起來很詭異:'for(j = i-1; j> = 0 && temp assylias

回答

3

通過將temp = a[i]置於外部循環的初始化子句中,確保它只運行一次。在你給出的例子中,temp將被分配爲2,並且你永遠不會改變它。

然後在循環的其餘部分,您最終將temp的值分配給數組中的其他條目,只要有更大的條目。因此,大部分數組最終設置爲2.

因此temp = a[i]需要位於外部循環體中,而不是其初始化子句中。

+0

我不敢相信我那樣做了。不過謝謝。 – Rpant

相關問題