6.2 堆排序Heapsort

堆排序是一种基于完全二叉树的排序算法,通过建堆和调整堆来实现。建堆过程是从中间结点开始,调整每个中间结点以满足堆的性质,最后堆顶元素是最值。在输出最值后,将最后一个叶结点移到堆顶并重新调整,重复此过程得到最值序列。堆排序的时间复杂度为O(nlogn)。堆排序与快速排序不同,它在一条路径上进行比较和调整,而快速排序在每一层调用多个Partition函数。
摘要由CSDN通过智能技术生成

堆排序的中间数据结构是完全二叉树,通过控制数组元素的下标实现。

堆的定义:n个元素的序列 {k1,k2,...,kn} 当且仅当满足下关系时,称之为堆。

             (1) ki<=k2i    (完全二叉树,k2i与k2i+1是ki的下级结点)

                  ki<=k2i+1

             (2) ki>=k2i    

                  ki>=k2i+1

   (i=1,2,...,n/2)

i是中间结点或非终端结点。堆顶元素是最小值或最大值。从定义可知,堆是层次有序,一个结点比下一层的下级结点大或小,因此比所有下级结点大或者小。而快速排序则是结构有序,左子树比根结点小,右子树比根结点大。堆排序保存了排序的中间过程,比冒泡法的最值序列减少了比较次数。锦标赛排序算法用树形保留比较的过程,然而存储空间多,最值重复比较,因此调优发现了堆。

例题是清华大学版的《数据结构》10.4.3 堆排序和《编程珠玑》第14章 堆。

Heapsort算法原理

(1)建堆。建立层次有序的堆。在编程珠玑的隐式树中,完全二叉树,所有叶结点是最后一个层次,叶结点的上级结点应调整,维护堆。因此最后一个中间结点的下标是n/2,建堆是每

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值