1
想知道如果我能得到一些heapsort實施快速幫助。我有它的工作和排序很好,但在輸出它總是一切排序,除了第一個數字。這可能只是一個檢查的地方,但我已經檢查了我的代碼,並嘗試更改值,但沒有產生我需要的結果。任何意見,我去哪裏錯了? 這裏是我的源代碼:heapsort工作99%
code removed, problem was solved!
謝謝你們!
想知道如果我能得到一些heapsort實施快速幫助。我有它的工作和排序很好,但在輸出它總是一切排序,除了第一個數字。這可能只是一個檢查的地方,但我已經檢查了我的代碼,並嘗試更改值,但沒有產生我需要的結果。任何意見,我去哪裏錯了? 這裏是我的源代碼:heapsort工作99%
code removed, problem was solved!
謝謝你們!
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並在我的機器上進行了測試。它應該工作。這兩種方法只是一些小的改變。
要總結一下你沒有得到正確的:
在heapsort
方法,你通過了count
是從零開始的索引。但是,當您構建堆時,您只會循環到k = 1
,即需要再進行一次迭代。
在movedown
方法中,您應該已知左子項索引爲2*k+1
,而右子項索引爲2*k+2
。
你沒有與你的索引選擇保持一致(即,基於0或基於1)導致了我猜測的錯誤。
啊,我明白了!謝謝,雖然我感謝幫助。當我回家時會測試它:D – erp