码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序

时间:2018-05-26 16:44:04      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:hid   color   sys   ring   play   for   大于等于   closed   左右子树   

技术分享图片
 /**
     * 首先将无序序列构建成大顶堆或小顶对(父节点大于等于左右字节点的值)
     * arr[i]>=arr[2i+1] && arr[i]>=arr[2i+2]
     * 交换堆顶和末尾元素的值,重新调整堆结构
     * 交换数据,重复上面的步骤
     *
     * 第一个非叶子节点时(arr.length/2)-1
     *
     *
     */
    @Test
    public void headSort(){
        int[] array = {1,4,5,6,9,0,4,3,4,5};
        headSort(array);
        System.out.println(Arrays.toString(array));


    }

    public void headSort(int[] array){
        //构建大堆顶
        for (int i=(array.length)/2-1;i>=0;i--){
            //从第一个非叶子节点开始,从左到右,从下到上
            ajustHead(array,i,array.length);
        }

        for (int j=array.length-1;j>0;j--){
            swap(array,0,j);
            ajustHead(array,0,j);
        }

    }

    public void ajustHead(int[] array,int i,int length){
        int tem=array[i];
        for (int k=i*2+1;k<length;k=k*2+1){
            if(k+1<length && array[k]<array[k+1]){//左右子树比较
                k++;
            }
            if(array[k]>tem){
                array[i]=array[k];
                i=k;
            }else{
                break;
            }

        }
        array[i]=tem;
    }

    public void swap(int[] array ,int a,int b){
        int temp=array[a];
        array[a]=array[b];
        array[b]=temp;

    }
View Code

堆排序实践

堆排序

标签:hid   color   sys   ring   play   for   大于等于   closed   左右子树   

原文地址:https://www.cnblogs.com/nihaofenghao/p/9093150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!