堆排序

作者: 小动乾坤 | 来源:发表于2024-02-25 23:27 被阅读0次


堆排序思维导图

堆介绍:底层逻辑是完全二叉树

完全二叉树

只有底层可以没达到最大节点数,但是底层的所有节点都是自左而右填充的

数组元素i对应到完全二叉树,找到数组元素的父节点和子节点在数组中的位置,i是数组元素的下标索引,0起算

数组元素i的左子节点在数组中的位置=2*i+1

数组元素i的右子节点在数组中的位置=2*i+2

数组元素i的父节点在数组中的位置=(i-1)/2,结果向下取整

数组元素的下标索引与完全二叉树的下标索引对应关系

数组元素的下标索引=完全二叉树的下标索引(两个下标索引都是0起算)

列外:数组元素和完全二叉树元素的下标位置1起算,主要是处理过程方便

数组元素i的左子节点在数组中的位置=2*i

数组元素i的右子节点在数组中的位置=2*i+1

数组元素i的父节点在数组中的位置=i/2

堆属性:大/小顶堆

底层对应的完全二叉树中,任一节点对应的子树中其根节点逻辑上是最大/小的,这是一种约束,必须要满足的条件

堆中新增堆元素

放在堆尾,然后根据堆属性约束完成堆化过程,主要是当前新增元素与其父元素的比较和位置交换

堆中弹出任意元素

将待弹出元素与堆尾元素A交换,然后根据堆属性完成另一种堆化过程,主要是判断A元素是否需要上浮或下沉,建议先比较其父元素判断是否上浮,否则走下沉流程

堆排序过程

1.堆化数组元素

方法1:基于完全二叉树,自下而上逐个处理每个节点,每个节点走下沉流程(已推敲)

方法2:基于完全二叉树,自上而下逐个处理每个节点,每个节点走上浮流程(未推敲)

2.逐个弹出堆顶元素

相关文章

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • JS实现堆排序

    原理 堆排序原理 实现 说明 堆排序对大文件很有效 堆排序是不稳定排序

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 排序

    原创 堆排序: 使用visit数组从本质出发获取大顶堆排序。

  • 堆排序

    堆排序

  • C++基础入门之模板堆排序(上):模板上的list的创造与操作

    整段源码链接C++的模板元堆排序 要点 组建数据结构list 组建对list的各种基本操作 堆排序中组建堆排序个个...

  • 3.2-选择排序-堆排序

    参考链接 选择排序:堆排序(Heap Sort) 白话经典算法系列之七 堆与堆排序 堆排序与快速排序,归并排序一样...

网友评论

      本文标题:堆排序

      本文链接:https://www.haomeiwen.com/subject/szonadtx.html