堆排序

Posted 512178509

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。

技术分享图片
 /**
     * 首先将无序序列构建成大顶堆或小顶对(父节点大于等于左右字节点的值)
     * 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

堆排序实践

以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章

选择排序(简单选择排序堆排序的算法思想及代码实现)

排序--08---堆排序

python代码实现堆排序

算法-java代码实现堆排序

一文带你了解堆排序

堆排序