zoukankan      html  css  js  c++  java
  • 数据结构与算法之堆排

    堆 分为大顶堆和小顶堆

    其特点就是根节点的值一定大于或小于叶子节点的值

    堆的构建方式可以从上到下 或者 从下到上

    leftNode = parentNode * 2 + 1;

    rightNode = leftNode + 1;

    parentNode = (leftNode -1 ) / 2

    堆排序其实就是在堆的基础上 每次拿掉根接单 然后格式化堆 再拿掉根 以此往复 最终 有序

    public class StudyHeapSort {
    
        public static void main(String[] args) {
    
            String str = "12 10 12 2 9 5 6 2 -4 8 -5 -5 -7 -2 6 -8 1 -12";
            int [] array = ArrayUtil.stringToArray(str," ");
    
            ArrayUtil.printArray(array);
    
            heapSort(array);
    
            ArrayUtil.printArray(array);
        }
    
        private static void heapSort(int[] array) {
            MaxHeap maxHeap = new MaxHeap(array.length);
            if (array == null || array.length < 2) {
                return;
            }
    
            /** 数组变堆 */
            for (int i = array.length - 1; i >= 0; i--) {
                maxHeap.heapify(array, i, array.length);
            }
            int heapSize = array.length;
            ArrayUtil.swap(array, 0, --heapSize);
            /** 一直把最大值的提到后面 */
            while (heapSize > 0) { // O(N)
                maxHeap.heapify(array, 0, heapSize); // O(logN)
                ArrayUtil.swap(array, 0, --heapSize); // O(1)
            }
        }
    
    }
  • 相关阅读:
    zeplin使用教程
    如何卸载命令行全局安装的包
    webstrom快捷键
    更新npm至最新版本
    mac环境下安装react项目环境
    横向滚动条布局
    JAVA语法基础——动手动脑
    JAVA语言课堂测试
    暑假第八周进度报告
    暑假第七周进度报告
  • 原文地址:https://www.cnblogs.com/self-crossing/p/12958054.html
Copyright © 2011-2022 走看看