オブジェクト指向ではない静的メソッドで最大ヒープを構築しようとしています。これは私が持っているものですが、{"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 、 右?まあ、あなたのアルゴリズムをデバッグした場合、あなたの値は常に配列の境界から外れているので(左と右がx.lengthより大きい)、何もifの中に入ることはありません。だから、決して配列を変更しないでください。 – Igor