• 手撕堆排序 优先级队列的实现方式


    package 排序;
    
    import common.Utils;
    
    public class HeapSort {
    
        public static void Adjust(int[] arr,int startIndex,int len){
            int childIndex = 0;
            int threshold = len-1;
            for(;2*startIndex+1<len;startIndex = childIndex){
                childIndex = 2*startIndex+1;
                //if childIndex = len-1,then arr[childIndex+1] = arr[len],
                //which is ArrayIndexOutofBoundsException
                if(childIndex<threshold && arr[childIndex]<arr[childIndex+1])
                    childIndex++;
                if(arr[childIndex]>arr[startIndex]){
                    Utils.swap(arr, startIndex, childIndex);
                }else {
                    break;
                }
            }
        }
        
        public static void heapSort(int[] arr){
            long start = System.nanoTime();
            int midIndex = arr.length/2-1;
            //初始化堆
            for(int i = midIndex;i>=0;i--){
                Adjust(arr, i, arr.length);
            }
            
            //调整堆
            for(int i=arr.length-1;i>=1;i--){
                Utils.swap(arr, 0, i);
                Adjust(arr, 0, i);
            }
            long end = System.nanoTime();
            System.out.println("runtime:"+(end-start)/1e6);
        }
        
        public static void main(String[] args) {
            int[] arr = Utils.produceNum(0, 1000000, 600000);
            System.out.println("before heapSort");
            //Utils.displayByOneLine(arr);
            heapSort(arr);
            System.out.println("after heapSort");
            //Utils.displayByOneLine(arr);
        }
    }
  • 相关阅读:
    Nginx URL后面不加斜杠301重定向
    Jenkins 配置 Node.js 项目
    在 Linux 上搭建IntelliJ IDEA license server服务器
    Vue 使用细节收集
    sinopia 搭建记录
    cli 开发记录
    Cgroup(一)简介
    Kubernetes (一)POD驱逐
    RabbitMQ(五)镜像队列
    RabbitMQ(四)队列结构
  • 原文地址:https://www.cnblogs.com/czsblog/p/10688055.html
Copyright © 2020-2023  润新知