2016-12-31 68 views
-3

基本上我替換naData[i]非工作執行。我錯過了一些根本錯誤的東西嗎?第二個實現在相同的TEST數據上失敗。比較兩個(幾乎相同)的Insertion Sort實現;其中一個失敗

傳遞實現:

static long[] sort(long[] aData) { 
    for (int i = 1; i < aData.length; i++) { 
     long n = aData[i]; 

     int j = i - 1; 
     while (j >= 0 && aData[j] > n) { 
      aData[j + 1] = aData[j]; 
      j--; 
     } 
     aData[j + 1] = n; 
    } 
    return aData; 
} 

未按執行:

static long[] sort(long[] aData) { 
    for (int i = 1; i < aData.length; i++) { 
     int j = i - 1; 
     while (j >= 0 && aData[j] > aData[i]) { 
      aData[j + 1] = aData[j]; 
      j--; 
     } 
     aData[j + 1] = aData[i]; 
    } 
    return aData; 
} 
+0

這個問題是在沒有_reason_陳述的情況下進行的。好的將會是守門員。 –

+0

這個問題發佈時沒有閱讀和理解本網站的工作方式。請訪問[幫助]並閱讀[問]。發佈代碼並說,實際上,「請爲我調試」被認爲是無關緊要的。 –

+1

說實話,95%的時間我問一個問題,它被標記爲脫離主題。我嚴格避免在SO上提出任何問題,因爲** FEAR **被某人或另一個人標記爲** OFF-TOPIC **。我通常非常小心。這個問題在CR上被低估了,之後我來到了SO,並在這裏投了票。誠實地說,我不知道在哪裏發表問題,因爲SO上的_GOOD_問題的定義非常非常主觀。我希望你明白我在說什麼。 –

回答

2

在while循環的第一次迭代,j + 1 == i。因此,當您編寫aData[j + 1] = aData[j]時,可以在循環內更改aData[i]的值。

在初始版本中,n在整個操作過程中保持不變。還請注意,使用aData[i]而不是n不太可能提高性能(如果有的話,它可能會更慢)。

+0

明白了。我感到很傻。 –

相關問題