堆排序
思想
1.构造大顶堆
2.上滤方法调整堆
3.剔除大顶堆第一项
import java.util.*;
public class HeapSort
{
public static void main(String[] args){
int[] num={1,2,4,9,11,14,8,9,1,3};
doSort(num);
System.out.println(Arrays.toString(num));
}
public static void swap(int[] num,int a,int b){
int temp = num[a];
num[a] = num[b];
num[b] = temp;
}
public static void maxHeapify(int[] num,int middle,int length){
int maxIndex = middle;
int left = 2*middle+1;
int right = 2*middle+2;
if(left<=length-1&&num[left]>num[maxIndex]){
maxIndex = left;
}
if(right<=length-1&&num[right]>num[maxIndex]){
maxIndex = right;
}
if(maxIndex!=middle){
swap(num,middle,maxIndex);
maxHeapify(num,maxIndex,length);
}
}
public static void doSort(int[] num){
int length = num.length;
for(int i=length/2-1;i>=0;i--){
maxHeapify(num,i,length);
}
/*
for(int i=0;i<=length/2-1;i++){
maxHeapify(num,i,length);
}
*/
for(int i=length-1;i>=0;i--){
swap(num,0,i);
maxHeapify(num,0,i);
}
}
}