各种排序的时间复杂度

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
排列算法列表
在这个表格中,n是要被排序的纪录数量以及k是不同键值的数量。 稳定的
冒泡排序(bubble sort)—0(n2)
排序(Cocktail sort,双向的冒泡排序)一0(n2)
(in serti on sort)—0(n2)
桶排序(bucket sort)—0(n);需要0(k)额外记忆体
计数排序(counting sort)—0(n+k);需要0(n+k)额外记忆体
(merge sort)—0(n log n);需要0(n)额外记忆体
原地归并排序一0(n2)
排序 (Binary tree sort)
0(n log n);需要
0(n)额外记忆体
鸽巢排序(Pigeonhole sort)
Stupid sort—0(n3);递回版本需要0(n2)额外记忆体
Bead sort—0(n) or0(Vn),但需要特别的硬体
Pan cake sorti ng—0( n),但需要特别的硬体
排序的算法
排序的算法有很多,对空间的要求及其时间效率也不尽相同。下面列出了一些常
见的排序算法。这里面插入排序和冒泡排序又被称作简单排序,他们对空间的要
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减
的排列起来的操作。
分类
在计算机科学所使用的排序算法通常被分类为:
计算的复杂度(最差、平均、和最好表现),依据串列(list)的大小(n)。一般而言,好的表现是Q (n log n),且坏的行为是Q(n2)。对於一个排序理 想的表现是0(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少 需要Q(n log n)。
(quicksort)。包含shaker排序和(heapsort)。
当相等的元素是无法分辨的,比如像是整数,稳定度并不是一个问题。然而,假 设以下的数对将要以他们的第一个数字来排序。
(4, 1) (3, 1) (3, 7) (5, 6)
在这个状况下,有可能产生两种不同的结果,一个是依照相等的键值维持相对的 次序,而另外一个则没有:
求不高,但是时间效率却不稳定;而后面三种排序相对于简单排序对空间的要求 稍高一点,但时间效率却能稳定在很高的水平。基数排序是针对关键字在一个较
小范围内的排序算法。
插入排序
冒泡排序
选择排序
快速排序
堆排序
归并排序
基数排序
希尔排序
插入排序 插入排序是这样实现的:
首先新建一个空列表,用于保存已排序的有序数列(我们称之为"有序列表")<
记忆体使用量(以及其他电脑资源的使用)
稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。 也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原
本的串列中R出现在S之前,在排序过的串列中R也将会是在S之前。
一般的方法:插入、交换、选择、合并等等。交换排序包含(bubble sort)和
从列表的第一个数字到倒数第二个数字, 逐个检查:若某一位上的数字大于他的
下一位,则将它与它的下一位交换。
重复2号步骤,直至再也不能交换。
冒泡排序的平均时间复杂度与插入排序相同,也是平方级的,但也是非常容易实
现的算法。
选择排序
选择排序是这样实现的:
设数组内存放了n个待排数字,数组下标从1开始,到n结束。
从原数列中取出一个数,将其插入"有序列表"中,使其仍旧保持有序状态。
/ \
重复2号步骤,直至原数列为空。
插入排序的平均为平方级的,效率不高,但是容易实现。它借助了"逐步扩大成
果"的思想,使有序列表的长度逐渐增加,直至其长度等于原列表的长度。
冒泡排序
冒泡排序是这样实现的:
首先将所有待排序的数字放入工作列表中。
i=1
从数组的第i个元素开始到第n个元素,寻找最小的元素。
将上一步找到的最小元素和第i位元素交换。
如果i=n—1算法结束,否则回到第3步
选择排序的平均时间复杂度也是0(n2)的。
)—0(n2)ຫໍສະໝຸດ Baidu
额外记
(shell sort)—0(n log n)如果使用最佳的现在版本
Comb sort—0(n log n)
堆排序(heap sort)—0(n log n)
Smoothsort—0(n log n)
快速排序(quicksort) —O(n log n)期望时间,0(n2)最坏情况;对於大的、
乱数串列一般相信是最快的已知排序
In trosort—0(n log n)
Patienee sorting—0(n log n+k)最外情况时间,需要额外的0(n+k)空间,也需要找至U最长的递增子序列(longest increasing subsequenee
不实用的排序算法
Bogo排序一0(nxn!)期望时间,无穷的最坏情况。
—0(n+k);需要0(k)额外记忆体
基数排序(radix sort)—
0(n•k);需要0(n)
额外记忆体
Gnome sort—0(n 2)
Library sort——0(n log n) with high probability,
忆体
需要(1+&)n
不稳定
选择排序(selecti on sort
(3, 1) (3, 7) (4, 1) (5, 6)(维持次序)
(3, 7) (3, 1) (4, 1) (5, 6)(次序被改变)
不稳定排序算法可能会在相等的键值中改变纪录的相对次序, 但是稳定排序算法 从来不会如此。不稳定排序算法可以被特别地时作为稳定。 作这件事情的一个方 式是人工扩充键值的比较,如此在其他方面相同键值的两个物件间之比较, 就会 被决定使用在原先资料次序中的条目, 当作一个同分决赛。然而,要记住这种次 序通常牵涉到额外的空间负担。
相关文档
最新文档