5个数7次比较排序

  • 问题内容: 五个数七次比较排序
  • 原讨论链接: 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次比较排序)