2017-02-16 110 views
0

我試圖用不是面向對象的靜態方法構建一個最大堆。這就是我所擁有的,但是當我用以下數組調用方法時:{「C」,「D」,「A」,「B」,「E」},它只是返回數組,而不是最大堆訂購。我相信輸出應該是{「E」,「D」,「A」,「B」,「C」}。任何幫助都是極好的。先謝謝你!不是面向對象的buildMaxHeap方法

public static void buildMaxHeap(String[] x, int n) { 
    int left = 2*n; 
    int right = 2*n + 1; 
    int max = n; 
    for(int i = x.length/2; i >= 0; i--) { 
    if(left <= x.length && x[left].compareTo(x[max]) > 0) { 
     max = left; 
    } 
    if(right <= x.length && x[right].compareTo(x[max]) > 0) { 
     max = right; 
    } 
    if(max != n) { 
     String temp = x[n]; 
     x[n] = x[max]; 
     x[max] = temp; 
     buildMaxHeap(x,max); 
    } 
    } 
} 
+0

對不起,我開始與N = 0,但你顯然下手N = 5 , 對?那麼,如果你調試你的算法,它永遠不會進入任何if,因爲你的值總是超出數組的界限(左和右大於x.length)。所以,你永遠不會改變陣列。 – Igor

回答

0

記住,以及在C和C++編碼你可能在使用電池的長度作爲操作員的經驗問題與uncorrect輸出,因爲不同大小的初始小區和它的指針組成。它會覆蓋單元格的初始長度並將其縮短爲8個字節。

嘗試檢索這些字符的ASCII值,比使用除&征服排序algorythm命令您的數組單元格的字符基於其數值。字符的

獲得ASCII值:Get ASCII value at input word

更好的和更廣泛的與細胞的解釋問題,其指針的長度: Why does a C-Array have a wrong sizeof() value when it's passed to a function?

+0

抱歉沒有提供適當的代碼,但我主要用C/C++編程 – TheInvisibleMan