各种排序算法总结

发布时间:2023-01-10 14:14:36   来源:文档文库   
字号:
各种排序算法总结收藏排序Sorting排序问题的输入是一个线性表该线性表的元素属于一个偏序集;要求对该线性表的元素做某种重排,使得线性表中除表尾外的每个元素都小于等于(或大于等于)它的后继。R为非空集合A上的二元关系,如果R满足自反性(对于每一个x∈A,(x,x∈R,反对称性((x,y∈R∧(y,x∈R→x=y和传递性((x,y∈R∧(y,x∈R→(x,z∈R,则称RA上的偏序关系,记作≤。如果(x,y∈R,则记作x≤y,读作“x小于等于y”。存在偏序关系的集合A称为序集注意,这里的≤不是指数的大小,而是指在偏序关系中的顺序性。x≤y的含义是:按照这个序,x排在y前面。根据不同的偏序定义,≤有不同的解释。例如整除关系是偏序关系≤,3≤6的含义是3整除6大于或等于关系也是偏序关系,针对这个关系5≤4是指在大于或等于关系中5排在4的前面,也就是说54大。在实际应用中,经常遇到的偏序关系是定义在一个记录类型的数据集合上的。该记录类型中有一个主键keykey域的类型是某一个偏序集,记录的其他域称为卫星数据。比较线性表中的两个元素LiLj的大小,实际上是比较Li.keyLj.key的大小(这种比较当然也是偏序集中的比较)。举例而言,某公司的数据库里记录了员工的数据,每一项纪录包括姓名,编号,年龄,工资等几个域,如果以编号为key域对员工记录排序,则是将员工记录按照编号排序;如果以工资为key域对员工记录排序,则是将员工记录按照工资高低排序;如果以姓名为key域对员工记录排序,则是以员工姓名的汉语拼音按照字典顺序排序。关于偏序集的具体概念和应用,请参见离散数学的相关资料。如果一个排序算法利用输入的线性表在原地重排其中元素,而没有额外的内存开销,这种排序算法叫做原地置换排序算法(inplacesort;如果排序后并不改变表中相同的元素原来的相对位置,那么这种排序算法叫做稳定排序算法(stablesort排序问题一般分为内排序(internalsorting外排序(externalsorting两类:1.内排序待排序的表中记录个数较少,整个排序过程中所有的记录都可以保留在内存中;
2.外排序待排序的记录个数足够多,以至于他们必须存储在磁带、磁盘上组成外部文件,排序过程中需要多次访问外存。排序问题的计算复杂性对排序算法计算时间的分析可以遵循若干种不同的准则,通常以排序过程所需要的算法步数作为度量,有时也以排序过程中所作的键比较次数作为度量。特别是当作一次键比较需要较长时间,例如,当键是较长的字符串时常以键比较次数作为排序算法计算时间复杂性的度量。当排序时需要移动记录,且记录都很大时,还应该考虑记录的移动次数。究竟采用哪种度量方法比较合适要根据具体情况而定。在下面的讨论中我们主要考虑用比较的次数作为复杂性的度量。为了对有n个元素的线性表进行排序,至少必须扫描线性表一遍以获取这n个元素的信息,因此排序问题的计算复杂性下界为Ω(n如果我们对输入的数据不做任何要求,我们所能获得的唯一信息就是各个元素的具体的值,我们仅能通过比较来确定输入序列1,a2,..,an>的元素间次序。即给定两个元素aiaj,通过测试aijai≤aj,ai=aj,ai≥aj,ai>aj中的哪一个成立来确定aiaj间的相对次序。这样的排序算法称为比较排序算法面我们讨论一下比较排序算法在最坏情况下至少需要多少次比较,即比较排序算法的最坏情况复杂性下界。我们假设每次比较只测试ai≤aj,如果ai≤aj成立则ai排在aj前面,否则ai排在aj后面。任何一个比较排序算法可以描述为一串比较序列:(ai,aj,(ak,al,..,(am,an,...表示我们首先比较(ai,aj,然后比较(ak,al...,比较(am,an...,直到我们获取了足够的信息可以确定所有元素的顺序。显而易见,如果我们对所有的元素两两进行一次比较的话(总共比较了Cn2,就一定可以确定所有元素的顺序。但是,如果我们运气足够好的话,我们可能不必对所有元素两两进行一次比较。比如说对于有三个元素a1,a2,a3的线性表进行排序,如果我们先比较a1a2,得到a1≤a2;然后比较a2a3,得到a2≤a3则不必比较a1a3,因为根据偏序集的传递性,必有a1≤a3;但是如果a2≥a3,我们还必须比较a1a3才能确定a1a3的相对位置。如果我们适当的安排比较的次序的话,也可以减少比较的次数。这样我们可以用一棵二叉树表示比较的顺序,如下图所示:

本文来源:https://www.2haoxitong.net/k/doc/4a250a274b35eefdc8d333f3.html

《各种排序算法总结.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式