求无序数组的第二小的元素

1. 比较是成对比较的,先拿前2个数比较,大的那个记作当前最大值,小的那个是第二大值。然后每次比较一队元素,大的那个去和最大值比,如果比最大值大,就把它记为最大的,原来的最大和较小的那个比,大的记为第二大。如果大的那个没有最大值大,那么和第二大的比,如果比它大,就更新第二大的值。这样,每一对元素发生了3次比较,一共是1.5n次

这种方法和求最大最小元素类似


2. http://www.cnblogs.com/phishine/articles/1205351.html

 其方法叫做 tournament method, 算法实现如下: 
    对数组
a[1…n] 中元素成对的做比较,每次比较后讲较小的数拿出,形成的数组再继续这样处理,直到剩下最后的一个,就是数组中最小的那个。将这个过程以一个树的形式表现出来,如下图: 



    

在这个过程中,非树叶节点就是比较的次数,一共进行了n-1 次比较,树根即为最小的元素。而第二小的元素一定是在这个过程中与根节点进行过比较的元素。即上图中532。这样的节点最多有个,在这些节点中找到最小的元素需要进行-1次比较。因此总共所需的比较次数为 n-1 + -1 = n+-2 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值