堆排序

1:堆是满足下列性质的数列{r1,r2,r3.....rn},可将此数列看成是完全二叉树(左右子树分别也是堆)

小顶堆

ri<=r2i

ri<=r2i+1

大顶堆

ri>=r2i

ri>=r2i+1:

2:堆排序要解决的两个问题:

(1)如何由一个无序序列建立初始堆(可大顶堆可小顶堆)

            首先将一个无序序列建立成一个完全二叉树。然后每个叶子结点可视为单个元素 的堆,再利用下面调整堆的刷选的办法,自底向上的将所有子树调整为堆,直到将整个完全二叉树调整为堆。

(2)输出堆顶后如何刷选(所谓刷选就是对一颗左右子树均为堆的完全二叉树,如何调整根结点使整个二叉树成为堆。)(此题中默认为大顶堆)

         首先将完全二叉树的根结点中的记录移出,该记录为待“”调整的记录。此时根结点相当于 空结点空结点的左右子树中选出关键字 比较小的记录,若此关键字比待调整的记录的关键字小,则将此记录上移至空结点。此记录又是空姐点,然后再重复上述做法。直至空结点的左右孩子均小于待调整的结点记录 。将待调整的结点放入此空结点。

3:利用堆完成整个排序的过程。

(1)将无序的序列,建立成初始堆。然后将堆顶元素与最后一个记录(堆尾记录)记录交换。并将最后一个记录(堆尾记录)所在的记录剪枝。

(2)调整剩余 的记录序列,用刷选法调整为一个新堆。堆顶元素为第二个可以输出的值

(3)一次类推。输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值