- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
各种排序算法总结.doc
各种排序算法总结收嚴
排序
Sorting
排序问题的输入是一个线性表,该线性表的元素属于一个偏序集;要求对该线性 表的元素做某种重排,使得线性表中除表尾外的每个元素都小于等于(或大于等 于)它的后继。
设R为非空集合A上的二元关系,如果R满足自反性(对于每一个xGA,
(x, X)ER ),反对称性((x, y)GRA (y, x) e R-x=y )和传递性
((x, y) WR/\ (y, x) WR-* (x, z) WR),则称R为A上的偏序关系,记作W。如果 (x, y)eR,则记作xWy,读作“x小于等于y”。存在偏序关系的集合A称为偏 序集。
注意,这里的W不是指数的人小,而是指在偏序关系中的顺序性。xWy的含义 是:按照这个序,x排在y前面。根据不同的偏序定义,W有不同的解释。例如 整除关系是偏序关系W, 3W6的含义是3整除6。大于或等于关系也是偏序关系, 针对这个关系5W4是指在大于或等于关系中5排在4的前面,也就是说5比4 大。
在实际应用中,经常遇到的偏序关系是定义在一个记录类型的数据集合上的。在 该记录类型中有一个主键域key, key域的类型是某一个偏序集,记录的其他域 称为卫星数据。比较线性表中的两个元素L,和Lj的大小,实际上是比较key 和Lj.key的大小(这种比较当然也是偏序集中的比较)。举例而言,某公司的 数据库里记录了员工的数据,每一项纪录包拾姓名,编号,年龄,工资等儿个 域,如果以编号为key域对员工记录排序,则是将员工记录按照编号排序;如果 以工资为key域对员工记录排序,则是将员工记录按照工资高低排序;如果以姓 名为key域对员工记录排序,则是以员工姓名的汉语拼音按照字典顺序排序。
关于偏序集的具体概念和应用,请参见离散数学的相关资料。
如果一个排序算法利用输入的线性表在原地重排其屮元素,而没有额外的内存开 俏,这种排序算法叫做原地置换排序算法(in place sort);如果排序后并不改 变表中和同的元素原来的和对位置,那么这种排序算法叫做稳定排序算法 (stable sort)。
排序问题一般分为内排序(internal sorting )和外排序(external sorting ) 两类:
1. 内排序:待排序的表中记录个数较少,整个排序过程中所有的记
录都可以保留在内存中;
2. 外排序:待排序的记录个数足够多,以至于他们必须存储在磁带、
磁盘上组成外部文件,排序过程屮需要多次访问外存。
排序问题的计算复杂性
对排序算法计算时间的分析町以逍循若丁种不同的准则,通常以排序过程所需耍的算法步数作为度屋,有时也以 排序过程中所作的键比较次数作为度量。特别是当作一次键比较需要较K时间,例如,当键是较氏的字符出时, 常以键比较次数作为排序算法计算时间复杂性的度量。当排序时需要移动记录,且记录都很大时,还应该考虑记 录的移动次数。究竟采用哪种度量方法比较合适要根据具体情况而定。在下面的讨论中我们主要考虑川比较的次 数作为复杂性的度量。
为了对有n个元素的线性衣进行排序,至少必须扫描线性农一遍以获取这n个元素的信息,因此排序问题的辻篡 复杂性下界为Q(n)。
如果我们对输入的数据不做任何要求,我们所能获得的唯一信息就是各个元素的具体的值,我们仅能通过比较來 确定输入序列v a“a2,..,an的元素间次序。即给定两个元素和ar通过测试as①,
a芒q ,at=①,a, a,中的哪一个成立來确定印和a,间的相对次疗;。这样的排序算法称为比找豁算法。下 面我们讨论一下比较排序算法在最坏情况下至少需耍多少次比较,即比较排序算法的最坏情况复杂性下界。
我们假设每次比较只测试a芒可,如果a$q成立则q排在可前面,否则q排在q后面。任何一个比较排序算 法可以描述为一串比较序列:
表示我们首先比较(a”ad,然后比较(a*),…,比较(am,an). ...?直到我们获取了足够的信息町以确定所有 元索的顺序。显而易见,如果我们对所何的元索两两进行一次比较的话(总共比较了 C*次),就一定可以确定所 有元索的顺序。但是,如果我们运气足够好的话,我们町能不必对所有元索两两进行一次比较。比如说对于有三 个元索a15a2,a3的线性表进行排序,如果我们先比较和a?,得到玄泾比;然后比较a?和a?,得到a2a3: 则不必比较缶和as,因为根据偏序集的传递性,必有a?3;但是如果a2a3,我们还必须比较內和a?才能 确定alia3的和对位置。如果我们适当的安排比较的次序的话,也可以减少比较的次数。这样我们可以用一棵 二叉树表示比较的顺序,如下图所示:
该树的每一个非叶节点表示一次比较,每一根树枝表示一种比较结果,每一个叶节点表示i种排列顺序。这样的 一棵二叉树叫做決玻拟它用树枝表示了每次决策做出的选择。如
文档评论(0)