以升序排序为例,大顶堆实现:
package leetcode.sort.compare.select;
import java.util.Arrays;
public class HeapSort {
public void downAdjust(int[] array, int parentIndex, int length) {
int largestIndex = parentIndex;
int lChildIndex = 2 * parentIndex + 1;
int rChildIndex = lChildIndex + 1;
if (lChildIndex < length && array[largestIndex] < array[lChildIndex]) {
largestIndex = lChildIndex;
}
if (rChildIndex < length && array[largestIndex] < array[rChildIndex]){
largestIndex = rChildIndex;
}
// 父节点不是最大的,将最大节点和父节点交换
if (largestIndex != parentIndex) {
int temp = array[parentIndex];
array[parentIndex] = array[largestIndex];
array[largestIndex] = temp;
// !!!交换后可能会影响子树大小关系,递归使子树符合大顶堆规则
d