介绍太麻烦了-.-!直接上代码...
package sort;
public class HeapSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = {4,1,3,2,16,9,10,14,8,7};
for(int i = 0; i < a.length; i ++){
System.out.print(a[i] + ".");
}
HeapSort h = new HeapSort();
h.HEAPSORT(a);
System.out.println();
for(int i = 0; i < a.length; i ++){
System.out.print(a[i] + ".");
}
}
public int parent(int i){ //父节点
return (i - 1)/2;
}
public int left(int i){ //左孩子
return i * 2 + 1;
}
public int right(int i){ //右孩子
return i * 2 + 2;
}
public void swap(int a[], int i, int j){
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public void MAX_HEAPIFY(int a[], int i, int heapsize){ //最大堆调整
int l = left(i);
int r = right(i);
int largest;
if(l < heapsize && a[l] > a[i])
largest = l;
else largest = i;
if(r < heapsize && a[r] > a[largest])
largest = r;
if(largest != i){
swap(a, i, largest);
MAX_HEAPIFY(a, largest, heapsize);
}
}
public void BUILD_MAX_HEAP(int a[], int heapsize){ //建最大堆
for(int i = a.length / 2 - 1; i >= 0; i --)
MAX_HEAPIFY(a, i, heapsize);
}
public void HEAPSORT(int a[]){ //堆排序
int heapsize = a.length ;
BUILD_MAX_HEAP(a, heapsize);
for(int i = a.length - 1; i >= 1; i --){
swap(a, 0, i);
heapsize --;
MAX_HEAPIFY(a, 0, heapsize);
}
}
}