首页 > 编程语言 > 详细

第六章 堆排序

时间:2020-03-17 13:25:09      阅读:61      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

技术分享图片

如图所示,是一个数组,它可以被看成是一棵完全二叉树。树上的每个结点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且是从左向右填充。表示堆的数组 A 包括两个属性:A.length 数组的大小,A.heapSize 元素个数。这里 0 ≤ A.heapSize ≤ A.length。树的根结点 A[1] ,这样给定一个结点的下标 i,我们很容易计算得到它的父结点 A[i/2]左孩子 A[2*i]右孩子 A[2*i+1]

堆可以分为两种形式:最大堆最小堆。在这两种堆中,结点的值都要满足堆的性质,但一些细节定义有所差异。在最大堆中,除了根以外的所有结点都满足 A[i/2] ≥ A[i] ,也就是说某个结点的值至多与其父结点一样大。因此,堆中的最大元素存放在根结点中;并且,在任意子树中,该子树所包含的所有结点的值都不大于该子树根结点的值。最小堆的组织方式正好相反:除了根以外的所有结点都满足 A[i/2] ≤ A[i] ,最小堆中的最小元素存放在根结点中。

在堆排序算法中,我们使用的是最大堆。最小堆通常用于构造优先队列。

 

维护堆的性质

MaxHeapify 

100

 

第六章 堆排序

原文:https://www.cnblogs.com/bjxqmy/p/12509905.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!