- 问题内容: 五个数七次比较排序
- 原讨论链接: http://community.csdn.net/expert/topicview1.asp?id=2537867
- 所属论坛: 数据结构与算法 审核组: 其他
- 提问者: friendliu 解决者: zlf_jack
- 感谢: HUNTON、zlf_jack、plainsong、IT_worker、saint001
- 关键字:
- 答案:
求证,将随机数五个数进行排序,最差情况下的比较次数最好是7次.
哪位高手会呀。。。
---------------------------------------------------------------
一、先证明最差情况至少是7次。
将n个数的排序过程看作是在一棵2叉树上寻路(因为每次比较只有2个可能结果),而各种排序结果就是树的叶子,显然有n!个叶子,于是树高至少为h=upper_bound(log2(n!)),于是:
n个数排序至少要upper_bound(log2(n!))次比较
对于n=5,log2(5!)=6.9,即至少7次(这称为信息论下界)
二、再证明至多7次比较可以将任意给的5个数排序。
采用例证法,构造出这样的一个排序算法:
发信人: starfish (好好学习,天天向上), 信区: Algorithm
标 题: Re: 一个弱弱的问题,请高手指教
发信站: 南京大学小百合站 (Sun Sep 21 20:12:39 2003)
5个数通过7次比较排序的方法如下。
5个数之间的大小关系构成的一个树形图T。T中的一个结点代表一个数,而一条边代表它所
关联的两个数的大小关系,T的根就是中位数。显然T中的一条边要由一次比赛来确定。在
下
面的图中,如果x大于y,则节点x在节点y的上方且x和y有一条边相连。另外,*表示一般的
数,o表示下一次即将进行比较的两个数。
第1步,先任取两个数比较,结果为:
*
|
* o o *
第2步,再取另外两个数比较,结果为:
o o
| |
* * *
第3步,按照上图比较其中两个标记为o的数,比较结果只有一种情况:
*
/ /
o *
|
* o
第4步,按照上图比较其中两个标记为o的数,比较结果有两种情况:
o o *
/ / / / /
* * * *
| / /
* o o
第5步,按照上图比较其中两个标记为o的数,比较结果有两种情况:
* *
| / /
* * o
/ / |
o o o
| |
* *
第6步,按照上图比较其中两个标记为o的数,比较结果有三种情况:
* * *
| | / /
* * o o
| | / /
* * *
| / / |
* o o *
|
*
其中第一种情况已经排好序了
第7步,按照上图比较其中两个标记为o的数,比较结果只有一种情况:
*
|
*
|
*
|
*
|
*
所以只需要7步比较就可以把5个数排好序
5个数7次比较排序
最新推荐文章于 2021-05-20 13:54:13 发布