`

5个数排列所需的最少比较次数

c 
阅读更多

转:http://blog.csdn.net/fisher_jiang/article/details/2442486

5 个数最快的排序, H.B.Demuth 于 1956 年在他的博士论文中提出了以下方法:

开始时,就像用合并对4个元素排序一样,首先比较a:b,接着 c:d,然后把每对的较大者拿来比较,这就产生了a<b<d和 c<d, 进行 3 次比较, 可以找到如下有序关系 (以下图中所有连线均表示左下元素比右上元素小)
 b--d
 /    /
a c e

 

这时,我们把第5个元素e,插入到{a,b,d}当中的适当位置,只需比较两次,首先同b进行比较,而后同a或d进行比较,就有如图所示的四种情况
    b-d   e-b-d    b-e-d    b-d-e
    /  /        /   /      /    /       /  /
e-a c     a  c     a   c     a c
对以上任意一种情况, 总可以通过两次比较将 c 调整入由 abde 构成的有序队中 (用二分的思想)
这样处理后总共需要比较 3 + 2 + 2 = 7 次, 能选出答案 7 并且解答过程无误的可以给双倍的分
资料来源: [Ph.D.thesis, Standford University(1956), 41~43]
同时在 D.E.Knuth 的著作 <计算机程序设计艺术> (The Art of Computer Progamming) 第三卷(排序和查找) 173 页至 174 页对这个问题有一个详细的解释.

分享到:
评论

相关推荐

    java 经典习题.doc

    例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出...

    算法分析与设计习题集答案

    要求用一个天平将假的金币找出来,试设计一种算法(方案),使在最坏情况下用天平的次数最少。 15、 利用分治策略,在n个不同元素中找出第k个最小元素。 16、 设有n个运动员要进行网球循环赛。设计一个满足以下要求...

    algorithms.py:Python 3 中的算法游乐场

    算法.py Python 3 中@sagivo一个端口问题问题解决方案归并排序.py 计数排序计数排序.py 贝壳类去做...set.py 查找具有相同数字集的下一个更高的数字same_digits_next_bigger.py [找到形成回文所需的最少插入次数](来自...

    LINGO软件的学习

    因此,派生集的索引个数是最终原始父集的个数,索引的取值是从原始父集到当前派生集所作限制的总和。 总的来说,LINGO可识别的集只有两种类型:原始集和派生集。 在一个模型中,原始集是基本的对象,不能再被拆分成...

    《数据结构 1800题》

    要满足五个基本特性 D.A和 C. 5. 下面关于算法说法错误的是(D )【南京理工大学 2000 一、1(1.5分)】 A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的...

    数据结构(C++)有关练习题

    综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素个数。...

    Excel函数活用范例大辞典(全新版).何先军.2015-2(带书签高清文字版).pdf

    035 计算发放工资所需各种面额钞票的数量 94 036 给通讯录中的数据编号 96 037 计算员工年限工资 98 038 计算可以组建的业务小组的个数 101 039 计算员工的提成工资 103 040 制作商品简易标签 104 ◎求...

    计算机二级公共基础知识

    计算循环队列的元素个数:“尾指针减头指针”,若为负数,再加其容量即可。 1.5 链表 在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中...

    关于ds18b20程序

    DS18B20温度传感器 * * C51 * * yajou 2008-06-28 无CRC * ********************************************************/ #include "reg51.h" #include "intrins.h" #include "DS18B20.h" /**********************...

    入门学习Linux常用必会60个命令实例详解doc/txt

    不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。 ◆ 安装和登录命令:login、shutdown、...

    2009达内SQL学习笔记

    函数可能会带来系统的不可移植性(可移植性:所编写的代码可以在多个系统上运行)。 加入注释是一个使用函数的好习惯。 大多数SQL实现支持以下类型的函数: 文本处理, 算术运算, 日期和时间, 数值处理。 Null:...

Global site tag (gtag.js) - Google Analytics