import java.util.Arrays;
public class HeapSort {
public static void main(String[] args) {
int[] a = new int[] { 0, 53, 17, 78, 9, 45, 65, 87, 32 };
heapSort(a, a.length - 1);
System.out.println(Arrays.toString(a));
}
static void heapSort(int[] a, int len) {
buildMaxHeap(a, len);
for (int i = len; i > 1; i--) {
swap(a, i, 1);
adjustDown(a, 1, i - 1);
}
}
static void swap(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
static void adjustDown(int[] a, int k, int len) {
a[0] = a[k];
for (int i = 2 * k; i <= len; i *= 2) {
if (i < len // 小于总长度
&& a[i] < a[i + 1]// k的左右子节点比较
) {
i++;
}
if (a[0] >= a[i])
break;
else {
a[k] = a[i];
k = i;// 继续调整子节点
}
}
a[k] = a[0];
}
static void buildMaxHeap(int[] a, int len) {
for (int i = len / 2; i > 0; i--) {
adjustDown(a, i, len);
}
}
}