package com.sksort;
public class select_heap {
public static void main(String[] args) {
int a[] = {6,7,3,0,4,3};
select_heap h = new select_heap();
h.select_heap(a);
h.show(a);
}
public void select_heap(int a[]) {
//首次建堆,从最后一个非叶子节点开始逐渐递归
for(int i=a.length/2-1;i>=0;--i){
heapAdjust(a, i, a.length-1);
}
//把堆顶最大的换到最后一个,然后重新寻找最大的堆顶
for(int i=a.length-1;i>0;--i){
int temp = a[i];
a[i] = a[0];
a[0] = temp;
this.heapAdjust(a, 0, i-1);
}
}
//类似建大顶堆的过程,不完全。寻找一个最大的放在a[low]处
public void heapAdjust(int a[], int low, int high) {
int temp = a[low];
for(int i=low*2+1;i<high;i=i*2){
if(a[i]<a[i+1])
++i;
if(temp>a[i])
break;
else {
a[low] = a[i];
low = i;
}
}
a[low] = temp;
}
public void show(int a[]) {
for (int i = 0; i < a.length; i++) {
if (i == 0)
System.out.print(a[i]);
else
System.out.print(" " + a[i]);
}
System.out.println();
}
}
选择类-----堆排序
最新推荐文章于 2024-06-26 16:11:03 发布