我試圖用不是面向對象的靜態方法構建一個最大堆。這就是我所擁有的,但是當我用以下數組調用方法時:{「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);
}
}
}
對不起,我開始與N = 0,但你顯然下手N = 5 , 對?那麼,如果你調試你的算法,它永遠不會進入任何if,因爲你的值總是超出數組的界限(左和右大於x.length)。所以,你永遠不會改變陣列。 – Igor