• 堆排序


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

    堆排序实践

  • 相关阅读:
    HDU4565
    CF861D
    UVA 11651
    HDU5950
    POJ3267
    POJ1094
    POJ1905
    HDU3567
    进程的同步与互斥
    预防死锁,检测死锁,避免死锁,解除死锁....
  • 原文地址:https://www.cnblogs.com/nihaofenghao/p/9093150.html
Copyright © 2020-2023  润新知