public class Heap_paixu {
public static void main(String[] args) {
int[] str= {55,66,95,45,20,15,3,87,16};
/*int[] str= {55,95,21,103,78,66};*/
/*printArray(str);*/
heapsort(str);
for (int i : str) {
System.out.println(i);
}
}
/*public static void printArray(int[] array) {
System.out.print("{");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
if (i < array.length - 1) {
System.out.print(", ");
}
}
System.out.println("}"); }*/
public static void exchange(int[] a,int index1,int index2) {
int temp=a[index1];
a[index1]=a[index2];
a[index2]=temp;
}
private static void heapsort(int[] a) {
if (a == null || a.length <= 1) {
return;
}
for( int s=a.length/2;s>=0;s--) { //s是从n/2的节点开始减一减一地比 大的堆 的值
buildsmallheap( a, s, a.length-1);
}
for( int s=a.length-1;s>=1;s--) {
exchange(a, 0, s);
buildsmallheap(a, 0, s-1);
}
}
private static void buildsmallheap(int[] a,int start,int length) {//start是小堆的开始节点,逐1往下寻找
int i=2*start+1;
int temp=a[start];
for(;i<=length;i=i*2+1) {
if((i+1)<=length&&a[i]<a[i+1]) {
i++;
}
if(temp>=a[i]) {
break;
}
a[start]=a[i];
start=i;
}
a[start]=temp;
}
}
堆排序
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...