/*最大堆*/
public class HeapSort {
int heapsize;
int[] heap;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HeapSort hp = new HeapSort();
hp.heap = new int[]{99,5,6,98,97,96,4,3,2};
hp.heapsize = hp.heap.length;
hp.heapsort(hp.heap);
for (int i = 0; i <hp.heap.length; i++) {
System.out.print(hp.heap[i]+" ");
}
}
private static int parent(int i){
return (int)Math.floor((i-1)/2);
}
private static int left(int i){
return 2*i+1;
}
private static int right(int i){
return 2*i+2;
}
private static void exchange(int[] a, int i, int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
private void maxHeapify(int[] A, int i){
int l = left(i);
int r = right(i);
int largest;
if (l<=this.heapsize-1 && A[l]>A[i]){
largest = l;
}
else{
largest = i;
}
if(r<=this.heapsize-1 && A[r]>A[largest]){
largest = r;
}
if(largest !=i){
exchange(A, i, largest);
maxHeapify(A, largest);
}
}
public void buildMaxHeap(int[] A){
for(int i=(int)Math.floor(A.length/2)-1;i>=0;i--){
System.out.println((int)Math.floor(A.length/2)-1);
this.maxHeapify(A, i);
}
}
public void heapsort(int[] A){
buildMaxHeap(A);
for(int i=A.length-1;i>=1;i--){
exchange(A,0,i);
this.heapsize--;
maxHeapify(A,0);
}
}
}