最快的排序算法是什么

作者&投稿:当涂琬 (若有异议请与网页底部的电邮联系)
~ 最快的排序算法是什么,很多人的第一反应是快排,感觉QuickSort 当然应该最快了,其实并非如此,快排是不稳定的,最坏情况下,快排序并不是最优,Java7 中引入的 TimSort 就是一个结合了插入排序和归并排序的高效算法.

Timsort最早是 Tim Peters 于2001年为 Python 写的排序算法。自从发明该算法以来,它已被用作Python,Java,Android平台和GNU Octave中的默认排序算法。

关于此算法的详细描述参见 http://svn.python.org/projects/python/trunk/Objects/listsort.txt

看看它与另外两个高效排序算法的比较

相比之下, TimSort 的最佳,平均和最坏情况综合起来最佳。在数据量比较少(<=64)的情况下,它直接用 Insert Sort,否则使用 MergeSort + BinarySearch 来提高排序效率

下面写一个给扑克牌排序的例子,比较一下冒泡,插入,快排,归并排序,TimSort的性能:

然后分别用以上5种排序方法来做下性能比较

将1000 副牌打乱顺序的扑克牌排序下来,结果如下

但是 TimSort 也有一个问题, 在 JDK7 的描述中提到它有如下兼容性问题

所以在JDK7以后,实现Comparable接口的比较器需要满足以下三个约束条件:
1) 自反性:x,y 的比较结果和 y,x 的比较结果相反。
2) 传递性:x>y, y>z,则 x>z。
3) 对称性:x=y,则 x,z 比较结果和 y,z 比较结果相同。

如果你的比较方法违反了以上的约束,要么你不使用这个新的算法,还是回到传统的归并排序

要么修改你的比较器以符合上述的约束条件。

举两个例子如下


快速排序法在什么情况下最不利于发挥其长处
要排序的数据已基本有序的情况下。快速排序的基本思想是以基准元素为中心,将待排序表分成两个子表,然后继续对子表进行划分,直到所有子表的长度为1。如果每次划分结果,两个子表长度相等,则效率最高,如果一个子表的长度为0则效率最低。对已基本有序的表以第1个为标准进行划分时,其中一个表长度...

快速排序到底有多快?
冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序 随机生成一个数据集,数据个数从10,100,1000依次递增到10万个 比较每个排序算法所用时长,多次测试,减少误差 首先对 随机数 进行排序,看看哪个排序方法较快;然后再对“ 基本有序 ”的数据集排序,再比较这几种排序方法用时。使用...

快速排序算法的时间复杂度是多少?
快速排序的平均时间复杂度和最坏时间复杂度分别是O(nlgn)、O(n^2)。当排序已经成为基本有序状态时,快速排序退化为O(n^2),一般情况下,排序为指数复杂度。快速排序最差情况递归调用栈高度O(n),平均情况递归调用栈高度O(logn),而不管哪种情况栈的每一层处理时间都是O(n),所以,平均情况(...

快速排序算法的效率取决于
这两个算法完全地产生相同的比较次数,但是顺序不同。对于排序算法的稳定性指标,原地分区版本的快速排序算法是不稳定的,其他变种是可以通过牺牲性能和空间来维护稳定性的。快速排序是经常比较快,除了introsort变化版本外,仍然有最坏情况性能的机会。如果事先知道堆排序将会是需要使用的,那么直接地使用堆...

最快的排序算法是什么
最快的排序算法是什么,很多人的第一反应是快排,感觉QuickSort 当然应该最快了,其实并非如此,快排是不稳定的,最坏情况下,快排序并不是最优,Java7 中引入的 TimSort 就是一个结合了插入排序和归并排序的高效算法.Timsort最早是 Tim Peters 于2001年为 Python 写的排序算法。自从发明该算法以来,...

如何排序数组中两个数的大小?
1. 冒泡排序法:冒泡排序法是一种基础排序算法,通过比较相邻元素的大小来逐渐交换它们的位置,可以将最大或最小的元素移动到数组的末尾或开头。对于只有两个元素的数组,只需要进行一次比较和交换就可以确定它们的大小关系。2. 快速排序法:快速排序法是一种高效的排序算法,通过选取一个基准值,将数组...

排序算法有哪些,简述快速排序的核心
将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样只能在相邻的数之间进行交换,交换的距离就大得多了。因此总的比较和交换次数就少了,速度自然就提高了。图片及快速排序简述来源于<啊哈算法> ...

排序算法最快的是哪个
排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆...

...快速排序和冒泡排序,最省时间的算法是什么?
对同一个基本有序的待排序列分别进行堆排序、快速排序和冒泡排序,最省时间的算法是冒泡排序。冒泡排序的最好比较次数为n次,最差比较次数为n^2次,最差比较次数为0次,最差比较次数为n^2次,最差比较次数为1次,最差比较次数为1次。快速排序的最好比较次数为nlogn次,最差比较次数为n^2次...

八种基本排序及其时间复杂度
八种基本排序及其时间复杂度如下:冒泡排序O(n^2)、选择排序O(n^2)、插入排序O(n^2)、希尔排序O(n^2)、快速排序O(nlogn)、归并排序O(nlogn)、堆排序O(nlogn)、计数排序O(n+k)。扩展知识:排序算法是一类能够将一组数据按照某种特定顺序进行排列的算法。排序算法在计算机科学和数据处理中有...

代县19155887052: 一般来说,最快的排序算法是() -
扈映金龙:[选项] A. :归并排序 B. :快速排序 C. :插入排序 D. :希尔排序

代县19155887052: 什么排序的速度(时间复杂度)最快? -
扈映金龙: 从时间复杂度看,所有内部排序方法可以分为两类.1.插入排序 选择排序 起泡排序 其时间复杂度为O(n2);2.堆排序 快速排序 归并排序 其时间复杂度为O(nlog2n).这是就平均情况而言的,如果从最好的情况考虑, 则插入排序和起泡排序的时间复杂度最好,为O(n), 而其他算法的最好情况同平均情况大致相同.如果从最坏的情况考虑,快速排序的时间复杂度为O(n2),插入排序和起泡排序虽然同平均情况相同,但系数大约增加一倍,运行速度降低一半,而选择排序、堆排序和归并排序则影响不大.总之, 在平均情况下,快速排序最快; 在最好情况下,插入排序和起泡排序最快; 在最坏情况下,堆排序和归并排序最快.

代县19155887052: 排序的最快算法? -
扈映金龙: 我鼓励照样用快速排序,HASH排序前提太苛刻如不雅内存许可,就用commanche所说的办法例如把链表放到如许的一个数组struct { 对象指针} 对象数组[] 对象的排序字段然后用qsort

代县19155887052: 现在最快且最通用的排序算法是什么? -
扈映金龙: 快速排序

代县19155887052: 排序算法高手帮忙选一种最快的排序方法情况是这样的:开始只有一个数字,程序运行一段时间产生新的数字,再运行一段时间产生新数字.要求新数字产生之... -
扈映金龙:[答案] 内存排序算法中最常用的算法是快速排序算法,时间复杂度是Onlogn,其它的几个算法,如插入排序、堆排序的时间复杂性都是这个值. 正常排序问题可以用堆排序,或者快排序,但这些算法实际上都是在数据队列已知的情况下的算法,你实际需要...

代县19155887052: 最快的排序方法是什么?? -
扈映金龙: 归并排序 与数字顺序无关 平均时间长度为o(lg(n)) 一般 排序在最坏的情况下不会超过 n^2次

代县19155887052: 最快的排序方法和题目. -
扈映金龙: 快速排序是对冒泡排序的一种改进.它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归...

代县19155887052: Pascal中最快的排序法是什么?
扈映金龙: 堆排序,归并排序,快速排序都是最快速的排序算法,这三者都是O(NLOG2N)的;理论上基于比较的排序算法是无法超越这个极限的; 而这三者,相对比来说: 快排最好写,但不稳定; 堆排稍微长点,也不稳定; 归并排序代码不算长,是稳定的,但是需要额外的数组来临时存储; 我比较推荐快速排序,随机化加不加都行; 如果数据是限定在某一个小区间内的话,你还可以应用计数排序,这个算法是线性的.

代县19155887052: 最快、最慢的排序方法分别是什么 -
扈映金龙: 只有两种排序方法 冒泡法排序和选择法排序两个都差不多冒泡法排序for(i=0;i

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网