用一组{14,15,30,28,5,10}关键字序列,写出初始建堆过程图示,再根据初始堆写出堆排序过程图示。

用一组{14,15,30,28,5,10}关键字序列,写出初始建堆过程图示,再根据初始堆写出堆排序过程图示。,第1张

起始序列为14,15,30,28,5,10,

(1)因此起始堆的情况如下:

14

15 30

28 5 10

(2)假设是打算得到一个从小到大的c,所以需要建大顶堆,起始状态从下向上建堆:

第一步: 第二步:

14 30

28 30 28 14

25 5 10 25 5 10

(3)此时已经建立完了初始的堆。此时堆顶元素30即为最大元素敏源,将堆顶元素与堆最后

一个元素进行交换,此时30是最大元素位于队尾,因此无需继续排序。所以堆如下图

所示:10 28 14 25 5

(4)此时由于除被交换到堆顶的10以外其他的都基本有序,所以自上而下建堆得到的堆

如下:

28

25 14

10 5

(5)重复(3)和(4)步骤确定了28的位置并得到堆如下:凳拿局

25

10 14

5

(6)重复(3)和(4)步骤确定了25的位置并得到堆如下:

14

10 5

(7)重复(3)和(4)步骤确定了14的位置并得到堆如下:

10

5

(8)重复(3)和(4)步骤确定了10的位置,此时只有一个数5也位于了堆的第一个位置,

因此排序完成。

扩展资料:

建堆效率

n个结点的堆,高度d =log2n。根为第0层,则第i层结点个数为2^i,考虑一个元素在堆中向下移动的距离。大约一半的结点深度为d-1,不移动(叶)。四分之一的结点深度为d-2,而它们至多能向下移动一层。树中每向上一层,结点的数目为前一层的一半,而子树高度加一。

这种算法时间代价为Ο(n)

由于堆有log n层深,插入结点、删除普通元素和删除最小元素的平均时间代价和时间复杂度都是

Ο(log n)。

*** 作实现

在程序中,堆用于动态分配和释放程序所使用的对象。在以下情况中调用堆 *** 作:

1.事先不知道程序所需对象的数量和大小。枣让

2.对象太大,不适合使用堆栈分配器。

堆使用运行期间分配给代码和堆栈以外的部分内存。

传统上, *** 作系统和运行时库随附了堆实现。当进程开始时, *** 作系统创建称为进程堆的默认堆。如果没有使用其他堆,则使用进程堆分配块。

语言运行时库也可在一个进程内创建单独的堆。(例如,C 运行时库创建自己的堆。)除这些专用堆外,应用程序或许多加载的动态链接库 (DLL) 之一也可以创建并使用单独的堆。Win32 提供了一组丰富的 API用于创建和使用专用堆。有关堆函数的优秀教程,请参阅 MSDN 平台 SDK 节点

参考资料来源:百度百科-堆

首先这个数最少要为53,后面我帮你解答。。。。

首先

每3个放一堆余2个,可以算成3a+2

每5个放一堆余3个,可以算成5b+3

每7个放一堆余4个虚圆旅,可以算成7c+4

那么这三个结果都应该表示同一个数,所以可腔哪以令三个结果相等

就是3a+2=5b+3=7c+4,那么a=(7c+2)/3,b=(7c+1)/5.

又因为a,b,c三数都是正整数,所以就可以对c取值,当c=7时就能保证a,b都能取到正整数了,那么c=7带入7c+4=53了。谢谢采纳。差凳

堆排序就是将所有待排序的元素组成一个堆,然后不断d出堆顶的元素并调用函数维持堆序,直到所有元素均被d出后,排序完成。被d出的元素序列即一个有序数列。  

一般做法是这样:

当一个节点被插入时,将该节点放在堆的末尾(这是为了保证堆是完全二叉树)然后将该节点与它的父节点比较,看该节点是否大于(或小于)其父节点,即判断当前的堆是否满足堆序。如果不满足,则将该节点与其父节点交换。

再将该节点与其新的父节点做比较,依此类推,直到该节点不再需要与其父节点交换为止。(即满足堆袭则序时停止)  当一个根节点被d出(即被从堆中删除)时袜激,将堆最尾部的节点移动到头结点的位置,然后将该节点不断告禅袜与其子节点比较,如果不符合堆序则交换,直到符合堆序为止。

扩展资料:

堆的 *** 作

堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

在堆的数据结构中,堆中的最大值总是位于根节点(在优先队列中使用堆的话堆中的最小值位于根节点)。堆中定义以下几种 *** 作:

最大堆调整(Max Heapify):将堆的末端子节点作调整,使得子节点永远小于父节点

创建最大堆(Build Max Heap):将堆中的所有数据重新排序

堆排序(HeapSort):移除位在第一个数据的根节点,并做最大堆调整的递归运算

参考资料:

百度百科-堆排序


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12540324.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存