算法导论(第9章-中位数和顺序统计学)最大值和最小值

博客搬家:最爱午后红茶

n个数中同时找出最大值跟最小值:

例子:n = 7  

5  1  2  3  6  4  8

方法一:独立地找出最大值和最小值,各用n-1次比较,共有2n-2次比较。

方法二:成对地处理元素,先将一对输入元素相互比较,然后把较小者与当前最小值比较,把较大者与当前最大值比较,因此每两个元素需要比较3次。(n为奇数时,将最大值和最小值都设为第一个元素的值,然后成对地处理余下的元素,总共做了3*[n/2]次比较,[]为下界。n为偶数时,就对前两个元素做一次比较,以决定最大值和最小值的初始值,然后成对地处理余下的元素,总共做了3*(n-2)/2 + 2 = 3*n/2-2次比较,不管是哪一种情况,总的比较次数至多是3[n/2],[]为下界)

/* ---------------------------------------------------------------------------------------------------------------------------------*/

证明:在最坏情况下,利用n + [lg[n]] - 2 次比较,即可找到n个元素中的第二小元素。(提示:同时找最小元素)

常规查找:先找出最小值,用了n-1次比较,再找次小值,用了n-2次比较。一共用了2n-3次比较,无法满足题目要求。

我们可以利用树的结构来完成查找:成对比较,不断取小的值,这样可以求出最小值。而在比较的过程可以生成一棵树。具体如图

例子:n = 7  

5  1  2  3  6  4  8

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值