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)
            }
        }
    
    }
  • 相关阅读:
    php 全局变量 2
    PHP 全局变量 1
    巧用sublime
    ini_get和ini_set
    sublime安装sftp
    常用数组函数
    二维数组去重
    判断常量
    system(),exec() ,passthru()
    【收集】Python 微优化
  • 原文地址:https://www.cnblogs.com/self-crossing/p/12958054.html
Copyright © 2011-2022 走看看