堆排序我个人觉得是8大排序里边最难的一个,因为它不仅仅是一个排序算法,还涉及到一种常用的数据结构,大根堆。这是一个面试最容易问到的排序,因为它涉及到的知识点非常多,下面就对堆排序做一个总结。
首先堆排序,从算法的角度出发,分为3步:
第一步:构建初始的大根堆
public static int[] buildMaxHeap(int[] array){
for(int i = (array.length-2)/2;i>=0;i--){
adjustDownToUp(array,i,array.length);
}
}
第二步:编写构建大根堆的adjustDownToUp方法
public static void adjustDownToUp(int [] array,int k,int length){
int temp = array[k];
for(int i = 2*k+1;i<length-1;i = 2*i+1){
if(array[i]>a[i+1]) i++;
if(temp>a[i]) break;
else{
array[k] = array[i];
k = i;
}
}
array[k] = temp;
}
第三步:编写heapSort主方法
public static void heapSort(int[] array){
array = buildMaxHeap(array);
for(int i = array.length - 1;i>=1;i--){
int temp = array[0];
array[0] = array[i];
array[i] = temp;
adjustDownToUp(array,0,i);
}
}
以上就是堆排序的所有代码过程,详细的介绍我觉得以下文章写得不错
http://www.cnblogs.com/CherishFX/p/4643940.html