堆排序 - 最大堆

问题描述 投票:0回答:1

我在[17,98,89,42,67,54,89,25,38]中有一个数字列表,它将从左到右插入一个空堆中。什么是最终的堆?

sorting max heap heapsort
1个回答
0
投票

虽然这不是堆排序算法(通过使用堆对数据集进行排序),但构建堆确实需要进行一些比较工作以确保它仍然是堆(您需要最大堆,因此所有子节点都小于它们的父节点)。构建最大堆的方法是将最新元素放在下一个可用点中(树中最左侧的点未填充在最深的行中,或者从最左侧的点开始新行)。插入一个元素后,如果它比它的父元素大,则它与它的父元素交换,直到它成为树的根或找到比它自身大的父元素。这样做直到插入所有元素,并且事实上它具有max元素作为根。

重要的是要注意,对于最小堆,最小元素是根,因此不是让所有父母都比他们的孩子大,而是所有孩子都比他们的父更大。在构建最小堆时,仍然会将新顶点添加到同一位置,但如果子节点小于父节点而不是更多节点,则将新节点与其父节点一起切换。

已经附加了两个图像,得到的最大和最小堆。注意,89a对应于前89和89b对应于秒,以便澄清。 Max Heap Min Heap

© www.soinside.com 2019 - 2024. All rights reserved.