我正在尝试使用CLRS书籍实现堆排序。我的代码是:
private void maxHeapify(int[] input, int i) {
int l = left(i);
int r = right(i);
int largest;
if(l <= heapSize && input[l] > input[i]) {
largest = l;
} else {
largest = i;
}
if(r <= heapSize && input[r] > input[largest]) {
largest = r;
}
if(largest != i) {
swap(input, i, largest);
maxHeapify(input, largest);
}
}
private void buildMaxHeap(int[] input) {
heapSize = input.length;
for(int i = (input.length-1)/2; i >= 0; i--) {
maxHeapify(input, i);
}
}
public void heapSort(int[] input) {
buildMaxHeap(input);
for(int i = input.length-1; i > 0; i--) {
swap(input, 0, i);
heapSize--;
maxHeapify(input, 0);
}
}
对于{1, 5, 3, 7, 2, 0, 6, 2}
的输入,我的答案为7 3 0 6 2 5 1 2
。为什么会这样?我猜这与行for(int i = (input.length-1)/2; i >= 0; i--)
有关,但我不能指责它。