堆排序-大顶堆

public class HeapSortTest    
{
    public static void heapSort(int[] a){
        
        for(int i=a.length/2;i>0;i--){//i值的变化是对数据的编号从1开始,
        //与java语言中定义数组的下标对应是顶端编号不满足二叉树的定义
            heapAdjust(a,i,a.length);//对以个数组中的所有数据进行大顶堆的排列
        }
        //还有一个交换函数
        for(int l=a.length;l>1;l--){
            swap(a,0,l-1);//交换第一个数和最后一个数
            heapAdjust(a,1,l-1);
        }
    }
    public static void heapAdjust(int[] a,int i,int l){//1 (a,4,a.length)
        int temp = a[i-1];//所有的标号都为现有标号减1
        for(int s=i*2;s<l;s*=2){
            
            if(s<l&&a[s-1]<a[s]){
                ++s;
            }
            
            if(temp>a[s-1]){
                break;
            }

            a[i-1]=a[s-1];
            i=s;
        }

        a[i-1]=temp;    
    }
    //----------------------------------------------------------------------
    public static void swap(int[] a,int i,int j){
        int temp =a[i];
        a[i]=a[j];
        a[j]=temp;
    }
        //----------------------------------------------------------------------

    public static void main(String[] args) 
    {
        int[] b=new int[]{9,1,5,8,3,7,4,6,2,12,22,14,16,34,100,17,23,56,140,0,11};
        int[] a=new int[]{50,10,90,30,70,40,80,60,20,100};
        HeapSortTest.heapSort(a);
        HeapSortTest.heapSort(b);

        for(int elem:a)
            System.out.print(elem+" ");
        System.out.println();
        for(int elem:b)
            System.out.print(elem+" ");
    }
}
 

转载于:https://my.oschina.net/u/2439096/blog/741072

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值