我试图用不是面向对象的静态方法构建一个最大堆。这就是我所拥有的,但是当我用以下数组调用方法时:{“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