基本原理就不说了,代码慢慢撸!!!!!!!
import java.util.Arrays;
public class HeapSort {
public static void main(String[] args) {
//int [] array ={1,2,5,6,3,4,7,8,9,12,11,0};
int [] array = {2,3,4,5,6,7};
heapSort(array);
}
private static void heapSort(int[] array) {
// TODO Auto-generated method stub
if(array == null || array.length <2){
return;
}
// 插入建大顶堆 自下而上
for(int i = 0; i < array.length;i++){
heapInsert(array,i);
}
int size = array.length;
swap(array,0,--size);
// 删除堆顶 自上而下
while(size>0){
heapify(array,0,size);
System.out.println("tac="+array[size]);
swap(array,0,--size);
}
System.out.println(Arrays.toString(array));
}
private static void heapify(int[] array, int index, int size) {
// TODO Auto-generated method stub
int left = 2*index+1;
while(left<size){
int largest = left+1<size && array[left+1]>array[left]? left+1:left;
largest = array[largest] > array[index]?largest:index;
if(largest == index)break; //满足条件,不用往下调整
swap(array,largest,index);
index = largest;
left = 2*index+1;
}
}
private static void heapInsert(int[] array, int i) {
// TODO Auto-generated method stub
while(array[i] > array[(i-1)/2]){
swap(array,i,(i-1)/2);
i = (i-1)/2;
}
}
private static void swap(int[] array, int i, int j) {
// TODO Auto-generated method stub
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}