public class HeapSort {
public static void buildHeap(int[] a,int size){//大顶堆
for(int i=(size-2)/2;i>=0;i--){
heapAdjust(a,i,size);//调整堆
}
}
public static void heapAdjust(int[] a, int i, int size) {
// TODO Auto-generated method stub
int lchild=2*i+1;
int rchild=2*i+2;
int max=i;//值比较大的下标
if((rchild<size)&&a[max]<a[rchild]){
max=rchild;//如果右节点大于根节点
}
if(lchild<size&&a[max]<a[lchild]){
max=lchild;//如果左节点大于根节点
}
if(max!=i){//如果根节点不是原来的,则交换
int t;
t=a[max];
a[max]=a[i];
a[i]=t;
heapAdjust(a, max, size);//交换之后,将交换的叶子节点再进行调整
}
}
public static void heapSort(int[] a,int size){
buildHeap(a, size);//建立堆
for(int i=size-1;i>=0;i--){//排序
int t;//交换变量
t=a[0];
a[0]=a[i];
a[i]=t;
heapAdjust(a, 0, i);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={1,4,5,3,2};
heapSort(a,a.length);//堆排序
for(int b:a){
System.out.println(b);
}
}
}