堆排序 练习题

(注:大部分题由于找不到答案,所以作者不得不自己试着做。。)

 

6.1 堆

    1、在高度为h的堆中,元素个数最多、最少分别为?

解:由堆序性质,堆是一个底层完全充满的树,因此除第h层外,每层的结点个数为2^(k-1),k为当前层数。

        那么元素总个数为:N = 1 + 2 + 2^2 + 2^3 + …… + 2^(h-2) + n,其中n为第n层的元素个数,满足:1 ≤ n ≤ 2^(h-1),则可得:

         2^(h - 1) ≤ N ≤ 2^h - 1。

 

    2、证明:含 n 个元素的堆的高度为⌊lg n⌋。

证明:由6.1知: 2^(h - 1) -1 ≤ N ≤ 2^h - 1,因此可得:2^(h-1) < N < 2^h,则同取2的对数,得到:h - 1< lg n < h,则⌊lg n⌋ = h - 1,为高度减一。即h = ⌊lg n⌋ + 1,至于为什么和证明的结论产生误差,是由于书上堆的高度并没有包括最后一层。

   

    3、证明:在最大堆的任一子树中,该子树所包含的最大元素在子树的根节点上。

证明:由于最大堆性质:A[ Parent ( i ) ] ≥ A[ i ],得到因此对该子树任意非根结点 i,均有该结论,则递归可得,最大元素在子树的根节点上。

    4、假设一个最大堆的所有元素不同,那么该堆的最小元素位于哪里?

解:同样,根据最大堆的性质A[ Parent ( i ) ] ≥ A[ i ], 因此对于任意子树的根结点,均有:A[Left ( i ) ] ≤ A[i],同时,A[ Right ( i )] ≤ A[ i ],因此对任意子树递归,可得最小元素在叶节点上,同时由于所有叶节点都在堆的同一层——堆的最后一层,因此最小元素位于堆的最后一层。

    5、一个已排好序的数组是一个最小堆吗?

解:并不是,因为最小堆的性质为:A[ Parent ( i ) ] ≤ A[ i ],而排好序的数组性质为A[ i + 1] ≥ A[ i ],二者互不可推。

    6、值为<23,17,14,6,13,10,1,5,7,12>的数组是一个最大堆吗?

解: 将该数组以堆的形式给出: 23 

                                                 17   14

                                          6    13    10    1

                                      5 7    12

其中, 7 > 6,因此并非一个最大堆。

 7、证明: 当用数组表示存储n个元素的堆时,叶节点下标分别为⌊n/2⌋+1,⌊n/2⌋ + 2,…… n。

证明:在最大堆中,叶节点是满足A[ 2i ] ≥ A[ i ]的最小结点(在该简单路径上),在假设叶节点为 j 时,不存在 2j 的结点;假设结点⌊n/2⌋为叶节点,那么则与上述结论相悖,而当j = ⌊n/2⌋+1,Left( j )和Right( j )均大于n&#x

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值