package cn.it.cast;
import java.util.Arrays;
public class HeapSort {
public static void main(String []args) {
int[] array = {9, 8, 7, 6, 5, 4, 3, 2, 1,15,14};
headSort(array);
System.out.println(Arrays.toString(array));
}
/**
*
* @param array
*/
public static void headSort(int[] array){
//建立大根堆
int n =array.length-1;
for(int i= (array.length-2)/2;i>=0;i--){
HeapAdjust(array,i,n);
}
for(int i=n;i>=0;i--){
swap(array,i);
HeapAdjust(array,0,i-1);
}
}
public static void HeapAdjust(int[] array,int k,int n){
//每个点从上到下检查,从下到上遍历每个节点
int temp = array[k];
for(int i=2*k+1;i<=n;i=2*i+1){
if(i<n&&array[i]<array[i+1]){
i++;
}
if(temp>array[i]){
break;
}
array[k]=array[i];
k=i;
}
array[k]=temp;
}
public static void swap(int[] array,int k){
int temp = array[0];
array[0] = array[k];
array[k] = temp;
}
}