什么是堆

什么是堆,第1张

堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

1 堆中某个节点的值总是不大于或不小于其父节点的值;

2 堆总是一棵完全二叉树。

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

扩展资料

堆的实现通过构造二叉堆(binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。

堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。

堆栈的基本特点:先入后出,后入先出。除头尾节点之外。

堆是堆(heap),栈是栈(stack),虽然堆栈(heap and stack)有相似之处,但不要混为一谈。

本质上讲,堆(heap)是一种数据结构,是纯软件的实现。堆基于一定的程序基础(例如在 *** 作系统),它更加偏向于软件实现动态的内存管理,令程序运行时根据所需来动态申请/释放内存。

而栈(stack)既存在软件实现又存在硬件实现。栈本质上是一种简单的先进先出结构,主要目的是为程序运行时保存关键的现场数据,尤其适合于(嵌套式)中断的配合。几乎所有的微控制器/微处理器都具备硬件栈。而软件/ *** 作系统中又可以进一步建立软件栈,为线程建立专用的存储区域。

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

一般做法是这样:

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

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

扩展资料:

堆的 *** 作

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

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

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

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

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

参考资料:

百度百科-堆排序

以上就是关于什么是堆全部的内容,包括:什么是堆、什么是堆栈、计算机二级的中的“堆排序法”是怎么排的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9751480.html

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

发表评论

登录后才能评论

评论列表(0条)

保存