当前位置:文档之家› 各种排序的时间复杂度

各种排序的时间复杂度

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