堆排序

输入:n个数的一个序列 (A[1..n])

输出:输入序列的一个排序,满足b1≤b2≤…≤bn。

表示堆的数组A包括两个属性:A.length给出数组元素的个数,A.heap-size表示有多少个堆元素存储在该数组中。也就是说,虽然A[1..A.length]可能都存有数据,但只有A[1..A.heap-size]中存放的是堆的有效元素。这里, 0 ≤ A.heap-size ≤ A.length。

(二叉)堆数组A是一个近似的完全二叉树,树的根结点是A[1],这样,给定一个结点的下标i,它的父节点、左孩子和右孩子的下标:

`PARENT(i): return i/2// i>>1

LEFT(i): return2i// i<<1

RIGHT(i): return2i+1// i<<1 + 1

`

最大堆:堆的最大元素存放在根结点中。并且,在任一子树中,该子树所包含的所有结点的值都不大于该子树根结点的值。即:A[PARENT(i) ≥ A[i]。堆排序使用最大堆。

最小堆:堆的最小元素存放在根结点中。并且,在任一子树中,该子树所包含的所有结点的值都不小于该子树根结点的值。即:A[PARENT(i) ≤ A[i]。最小堆常用来构造优先队列。

堆中结点的高度:该结点到叶结点最长简单路径上边的数目。

堆的高度:根结点的高度。O(lgn)。其中,n为堆中元素个数。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 选择排序 每次在n个记录中选择一个最小的需要比较n-1次,但是这样的操作并没有把每一趟的比较结果保存下来,在后一趟...
    wlj1107阅读 5,621评论 0 2
  • 堆排序 堆排序基本简介 1991年的计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert ...
    BlackMammba阅读 5,842评论 0 10
  • 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大...
    风雪围城阅读 2,839评论 0 0
  • 2006年,作为一名高二学生,我开始接触各种小说,彼时大家总是以忧郁来标榜自己酷的品格,所以看的闲书也是以类似的题...
    青树芽阅读 3,153评论 2 0
  • 文/陈墨祎 时至工作两年,我又冒出了强烈的辞职的想法,上次涌起这个念头恰好在一年前,不知什么时候开始,辞职这事也有...
    陈墨祎阅读 3,644评论 3 10