2012-12-05 44 views
1

想知道如果我能得到一些heapsort實施快速幫助。我有它的工作和排序很好,但在輸出它總是一切排序,除了第一個數字。這可能只是一個檢查的地方,但我已經檢查了我的代碼,並嘗試更改值,但沒有產生我需要的結果。任何意見,我去哪裏錯了? 這裏是我的源代碼:heapsort工作99%

code removed, problem was solved! 

謝謝你們!

回答

1
private static void movedown(double [] a, int k, int c) { 
    while (2*k <= c-1) { 
     int j = 2*k+1; 
     if (j <= c-1 && less(a[j], a[j+1])) j++; 
     if (!less(a[k], a[j])) break; 
     exch(a, k, j); 
     k = j; 
    } 
} 

public static void heapsort(double [] a, int count) { 
    for (int k = count/2; k >= 0; k--) 
     movedown(a, k, count); 
    while (count >= 1) { 
     exch(a, 0, count--); 
     movedown(a, 0, count); 
    } 
} 

我修復了您的bug並在我的機器上進行了測試。它應該工作。這兩種方法只是一些小的改變。

要總結一下你沒有得到正確的:

  1. heapsort方法,你通過了count是從零開始的索引。但是,當您構建堆時,您只會循環到k = 1,即需要再進行一次迭代。

  2. movedown方法中,您應該已知左子項索引爲2*k+1,而右子項索引爲2*k+2

你沒有與你的索引選擇保持一致(即,基於0或基於1)導致了我猜測的錯誤。

+0

啊,我明白了!謝謝,雖然我感謝幫助。當我回家時會測試它:D – erp