public class HeapSort{
public static void main(String[] args) {
int[] a = new int[20];
Random r = new Random();
for(int i = 0; i<20;i++){
a[i] = r.nextInt(100);
System.out.print(a[i]+" ");
}
System.out.println();
heapSort(a);
for(int num : a){
System.out.print(num+" ");
}
}
private static void heapSort(int[] a) {
buildMaxHeap(a);
for(int i=a.length-1;i>0;i--){
exChangeElements(a, i, 0);
maxHeap(a,i,0);
}
}
private static void buildMaxHeap(int[] a) {
for(int i = a.length/2;i>=0;i--){
maxHeap(a,a.length,i);
}
}
private static void maxHeap(int[] a, int length, int i) {
int left = 2*i+1;
int right = 2*i+2;
int large = i;
if(left<length && a[i]<a[left]){
large=left;
}
if(right<length && a[large]<a[right]){
large=right;
}
if(large!=i){
exChangeElements(a,large,i);
maxHeap(a,length,large);
}
}
private static void exChangeElements(int[] a, int large, int i) {
int temp = a[i];
a[i] = a[large];
a[large] = temp;
}
}
堆排序算法
最新推荐文章于 2025-05-07 21:47:58 发布