最大堆排序的核心思想是建立一个最大堆,将数组的元素依次通过最大堆函数来调整.(开始位置从最后一个父节点开始)
然后将堆顶元素和元素末端元素进行交换,这样就可以将最大的元素放在数组的最后了.
代码
package Sort;
/**
* Created by Hammy on 2018/3/1.
*/
public class HeapSort
{
private HeapSort(){};
public static void sort(int[] array){
int n=array.length;
for(int i=n/2-1;i>=0;i--){
adjust(array,i,n);
}
for(int i=n-1;i>0;i--){
Util.swap(array,0,i);
adjust(array,0,i);
}
}
private static void adjust(int[] array,int i,int n){
int temp=array[i];
int j;
for(j=i*2+1;j<n;j=j*2+1){
if(j+1<n&&array[j+1]>array[j])
j=j+1;
if(temp>array[j])
break;
array[i]=array[j];
i=j;
}
array[i]=temp;
}
}
网友评论