最大堆排序的核心思想是建立一個(gè)最大堆,將數(shù)組的元素依次通過最大堆函數(shù)來調(diào)整.(開始位置從最后一個(gè)父節(jié)點(diǎn)開始)
然后將堆頂元素和元素末端元素進(jìn)行交換,這樣就可以將最大的元素放在數(shù)組的最后了.
代碼
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;
}
}