算法导论---有序序列中的i个最大数(思考题9-1)

问题描述:

这里写图片描述

问题求解:

这里写图片描述

a. 使用归并排序或堆排序对输入数据进行排序,均花费O(n*lgn)最坏情况运行时间(不要使用快排或插入排序,他们均花费O(n^2)的时间)。将i个最大元素(在已排序数组中直接可以获得)放到输出数组中,花费时间O(i)。
因此,总的最坏情况运行时间:O(n * lgn+i)=O(n * lgn) (因为i <= n)。

b.用堆来实现优先队列。使用BUILD-HEAP建堆,花费O(n)时间;然后调用
HEAP-EXTRACT-MAX 函数i次,以得到i个最大元素,使用时间O(i*lgn);然后将从输出数组提取到的逆序存储。最坏的情况下提取时间为O(i * lgn)。
最坏情况运行时间为:O(n + i*lgn)。

c.利用选择算法(SELECT algorithm)来找到第i大的元素,花费时间O(n);利用该元素划分(Partition),花费O(n)时间;排序i个最大元素,花费O(i*lgi)最坏时间(利用归并或堆排序)。总的最坏运行时间:O(n + i * lgi).

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值