package com.duobang.headSort;
import java.util.Arrays;
import java.util.Random;
public class MyHeapSort {
public static void main(String[] args) {
Random rd = new Random();
int count = 10;
int[] a = new int[count];
for (int i = 0; i < count; i++) {
a[i] = rd.nextInt(count);
}
System.out.println("初始数组:" + Arrays.toString(a));
heapSort(a);
System.out.println("排序后数组:" + Arrays.toString(a));
}
private static void heapSort(int[] a) {
buildMaxHeap(a);
for (int i = a.length - 1; i > 0 ; i--) {
swap(a,0,i);
adjustDownToUp(a,0,i);
}
if (a[0] > a[1]) {
swap(a,0,1);
}
}
private static void adjustDownToUp(int[] a, int root, int last) {
int tmp = a[root];
for (int i = root * 2 + 1; i < last - 1; i = i * 2 + 1) {
if (i < last && a[i] < a[i+1]) {
i++;
}
if (tmp > a[i]) {
break;
}else{
a[root] = a[i];
root = i;
}
}
a[root] = tmp;
}
private static void swap(int[] a, int i, int i2) {
a[i] = a[i] ^ a[i2];
a[i2] = a[i] ^ a[i2];
a[i] = a[i] ^ a[i2];
}
private static void buildMaxHeap(int[] a) {
int len = a.length;
for (int i = (len - 1 - 1)/2; i >= 0; i--) {
adjustDownToUp(a,i,len);
}
}
}