时间:2021-05-20
一、基本概念
堆:这里是指一种数据结构,而不是我们在C#中提到的用于存储引用类型对象的地方。它可以被当成一棵完全二叉树。
为了将堆用数组来存放,这里对每个节点标上顺序。事实上,我们可以用简单的计算公式得出父节点,左孩子,右孩子的索引:
parent(i) =
left(i) = 2i
right(i)=2i + 1
最大堆和最小堆:最大堆是指所有父节点的值都大于其孩子节点的堆,即满足以下公式:
A[parent[i]]A[i](A是指存放该堆的数组)
最小堆相反。
最大堆和最小堆是堆排序的关键,可知最大堆的根节点是堆中最大的节点。因此只要我们构造出最大(小)堆,最大(小)的元素也就得到了,然后再对剩下的元素继续构造最大(小)堆,就可以取出第二大(小)的元素,依此类推,直到排序完成。
二、构造最大(小)堆1.MaxHeapfy:该方法的前提是index处节点的左右子树已经是最大堆,最终的目的是使以index处节点为根的堆成为最大堆
2.BuildMaxHeap:该方法涉及一个事实:如果一个对含n个元素,那么从开始的元素(假设节点下表从1开始)就一定是叶子节点(这一点可以用反证法证明,假设处节点不是叶子节点,那么该节点必包含子节点,从而可以得出其左孩子的索引2 *() > n的结论,显然这是错误的)。在这个前提下,该方法至底向上通过MaxHeapfy将堆构建成最大堆。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了C#实现堆排序的具体代码,供大家参考,具体内容如下代码://////堆排序方法。/////////待排序数组。///privatevoidH
本文实例讲述了Python排序搜索基本算法之堆排序。分享给大家供大家参考,具体如下:堆是一种完全二叉树,堆排序是一种树形选择排序,利用了大顶堆堆顶元素最大的特点
从堆排序的简介到堆排序的算法实现等如下:1.简介 堆排序是建立在堆这种数据结构基础上的选择排序,是原址排序,时间复杂度O(nlogn),堆排序并不是一种稳定的
作者:Sabine【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序 冒泡排序usingSystem;namespaceBubbleS
本文实例为大家分享了C语言堆排序源代码,供大家参考,具体内容如下1.堆排序堆排序的定义及思想可以参考百度百科:用一句概括,堆排序就是一种改进的选择排序,改进的地