查找n个元素中第二小的元素
在算法导论中习题9-1提出,在最坏情况下利用 n +
- 2 次比较,找出n个元素中第二小的元素。
其方法叫做 tournament method, 算法实现如下:
对数组a[1…n] 中元素成对的做比较,每次比较后讲较小的数拿出,形成的数组再继续这样处理,直到剩下最后的一个,就是数组中最小的那个。将这个过程以一个树的形式表现出来,如下图:
![](https://www.cnblogs.com/images/cnblogs_com/phishine/log.jpg)
其方法叫做 tournament method, 算法实现如下:
对数组a[1…n] 中元素成对的做比较,每次比较后讲较小的数拿出,形成的数组再继续这样处理,直到剩下最后的一个,就是数组中最小的那个。将这个过程以一个树的形式表现出来,如下图:
![](https://www.cnblogs.com/images/cnblogs_com/phishine/tournament_tree.jpg)
在这个过程中,非树叶节点就是比较的次数,一共进行了n-1 次比较,树根即为最小的元素。而第二小的元素一定是在这个过程中与根节点进行过比较的元素。即上图中5,3和2。这样的节点最多有个,在这些节点中找到最小的元素需要进行
-1次比较。因此总共所需的比较次数为
n-1 +
-1 =
n+
-2 次
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步