赞
踩
堆是一种非线性结构,可以看作是一棵二叉树,也可以表示为一个数组。简而言之,堆就是利用完全二叉树的结构来维护的一维数组。
堆分为大顶堆和小顶堆两种类型:
在排序算法中:
对于Top K问题,也可以用堆来实现:
大顶堆的构建过程从最后一个非叶子节点开始,从下往上进行调整。
如何找到最后一个非叶子节点?
假设用数组表示待排序的序列,则最后一个非叶子节点的位置是:数组长度/2 - 1
。
例如,若数组长度为9,则最后一个非叶子节点的位置是:9/2 - 1 = 3
。
调整过程:
当无需交换时,大顶堆的构建完成。
图解:以数组 [3, 7, 16, 10, 21, 23]
为例,展示大顶堆的构建过程。
排序过程概括如下:
n-1
个元素重新构建成大顶堆。总结: 以上过程反复执行,最终将一个无序的数组排序为一个有序序列。
原文链接:https://www.cnblogs.com/sunshineliulu/p/12995910.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。