堆排序
package com.buaa.algorithm.sort;
/**
* 堆排序
* @author lzxyzq
*
*/
public class d3HeapSorted {
static void heapOne(int[]a,int n,int k){
int k1 = 2*k + 1;
int k2 = 2*k + 2;
if(k1>=n&&k2>=n)return;
int a1 = Integer.MAX_VALUE;
int a2 = Integer.MAX_VALUE;
if(k1<n) a1 = a[k1];
if(k2<n) a2 = a[k2];
if(a[k]<=a1&&a[k]<=a2)return;
if(a1<a2){
int t = a[k];
a[k] = a[k1];
a[k1] = t;
heapOne(a,n,k1);
}else{
int t = a[k];
a[k] = a[k2];
a[k2] = t;
heapOne(a,n,k2);
}
}
static void heapSort(int[]a)
{
for(int i=(a.length-1)/2;i>=0;i--)
heapOne(a,a.length,i);
int n = a.length;
while(n>0){
System.out.print(a[0]+" ");
a[0] = a[n-1];
n--;
heapOne(a,n,0);
}
System.out.println();
}
public static void main(String[] args) {
int[]a = {12,3,6,8,5,19,20,16,4,2,7,13,9,11};
heapSort(a);
}
}