关于链接中的堆排序算法,如果认真分析的话,会发现问题

来源:互联网 发布:python reversed函数 编辑:程序博客网 时间:2024/05/17 13:09
原文链接:http://blog.csdn.net/zxman660/article/details/7940215
package Dec1;public class HeapSort {public HeapSort(Object[] a) {int len = a.length;//构建堆for(int i=(len-1)/2;i>=0;i--) {heapAdjust(a,i,len);}//输出堆顶元素并调整新建堆的过程int count = len-1;while(count>1) {//需要注意此处循环次数//交换树根和最后一个值swap(a,0,count);count-- ;heapAdjust(a,0,count);}}private static void heapAdjust(Object[] a, int i,int len) {Object parent = a[i];for(int j=(i+1)*2-1;j<len;j=(j+1)*2-1) {if(j<len-1 && ((Comparable<Object>)a[j]).compareTo(a[j+1])<0) {++j;}if(((Comparable<Object>)parent).compareTo(a[j])>0) {break;}a[i] = a[j];i = j;}a[i] = parent;//parent插入到正确位置}private static void swap(Object[] a,int i,int j) {Object temp = null;temp = a[i];a[i] = a[j];a[j] = temp;}public static void main(String[] args) {Integer[] data = {49,38,65,97,1,13,27,49};//Integer[] data1 = new Integer[8];new HeapSort(data);//for(int i=0;i<data.length;i++) {//data1[i] = data[data.length-1-i];//}for(int i=1;i<=data.length;i=i*2) {for(int k=i-1;k<2*i-1 && k<data.length;k++) {System.out.print(data[k]+" ");}System.out.println();} }}

0 0
原创粉丝点击