• 经典排序算法 堆排序Heap sort


    经典排序算法 - 堆排序Heap sort

    堆排序有点小复杂,分成三块

    第一块,什么是堆,什么是最大堆

    第二块,怎么将堆调整为最大堆,这部分是重点

    第三块,堆排序介绍


    第一块,什么是堆,什么是最大堆

    什么是堆

    这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构。

    堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素.

    数组与堆之间的关系

    Heap1

    二叉堆一般分为两种:最大堆和最小堆。

    什么是最大堆

    堆中每个父节点的元素值都大于等于其孩子结点(如果存在),这样的堆就是一个最大堆

    因此,最大堆中的最大元素值出现在根结点(堆顶)

    节点与数组索引关系

    对于给定的某个结点的下标i,可以很容易的计算出这个结点的父结点、孩子结点的下标,而且计算公式很漂亮很简约

    Image(2)

    第二块,怎么将堆调整为最大堆,这部分是重点

    整个过程如下图所示

    在4,14,7这个小堆里边,父节点4小于左孩子14,所以两者交换

    在4,2,8这个小堆里边,父节点4小于右孩子8,所以两者交换

    Heap3

    上图展示了一趟调整的过程,这个过程递归实现,直到调整为最大堆为止

    第三块,堆排序介绍

    堆排序就是把堆顶的最大数取出,

    将剩余的堆继续调整为最大堆,具体过程在第二块有介绍,以递归实现

    剩余部分调整为最大堆后,再次将堆顶的最大数取出,再将剩余部分调整为最大堆,这个过程持续到剩余数只有一个时结束

    下边三张图详细描述了整个过程

    Heap4

    Heap5

    Heap6

    参考文章

    http://blog.kingsamchen.com/archives/547#viewSource

    返回主目录 [经典排序算法][集锦]



    ------------------------------------------
    除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
    BUY ME COFFEE
  • 相关阅读:
    solr两种启动方式
    Centos7安装Solr
    关于netcore webservice 构建和参数大小控制问题
    百度开源ocr安装(飞浆)
    C# netcore 开发WebService(Soap)
    Aspose.CAD库简介 CAD转换PDF
    .net或JAVAK开发如何实现上传文件夹功能
    【转】TCP和SOCKET关系
    Asp.Net 绑定下拉框的值
    Windwos服务器远程桌面突然不能复制粘贴
  • 原文地址:https://www.cnblogs.com/kkun/p/2260286.html
Copyright © 2020-2023  润新知