在计算机科学所使用的排序算法通常依以下标准分类:
计算的时间复杂度(最差、平均、和最好性能),依据串列(list)的大小(
n
{\displaystyle n}
)。一般而言,好的性能是
O
(
n
log
n
)
{\displaystyle O(n\log n)}
(大O符号),坏的性能是
O
(
n
2
)
{\displaystyle O(n^{2})}
。对于一个排序理想的性能是
O
(
n
)
{\displaystyle O(n)}
,但平均而言不可能达到。基于比较的排序算法对大多数输入而言至少需要
O
(
n
log
n
)
{\displaystyle O(n\log n)}
。
内存使用量(以及其他电脑资源的使用)
稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录
R
{\displaystyle R}
和
S
{\displaystyle S}
,且在原本的串列中
R
{\displaystyle R}
出现在
S
{\displaystyle S}
之前,在排序过的串列中
R
{\displaystyle R}
也将会是在
S
{\displaystyle S}
之前。
排序的方法:插入、交换、选择、合并等等。
稳定性
编辑
稳定排序纸牌的例子。当纸牌用稳定排序按点值排序的时候,两个5之间必定保持它们最初的次序。在用不稳定排序来排序的时候,两个5可能被按相反次序来排序。
当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。
(
4
,
1
)
(
3
,
1
)
(
3
,
7
)
(
5
,
6
)
{\displaystyle (4,1)(3,1)(3,7)(5,6)}
在这个状况下,有可能产生两种不同的结果,一个是让相等键值的纪录维持相对的次序,而另外一个则没有:
(
3
,
1
)
(
3
,
7
)
(
4
,
1
)
(
5
,
6
)
{\displaystyle (3,1)(3,7)(4,1)(5,6)}
(維持次序)
(
3
,
7
)
(
3
,
1
)
(
4
,
1
)
(
5
,
6
)
{\displaystyle (3,7)(3,1)(4,1)(5,6)}
(次序被改變)
不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。不稳定排序算法可以被特别地实作为稳定。作这件事情的一个方式是人工扩充键值的比较,如此在其他方面相同键值的两个物件间之比较,(比如上面的比较中加入第二个标准:第二个键值的大小)就会被决定使用在原先资料次序中的条目,当作一个同分决赛。然而,要记住这种次序通常牵涉到额外的空间负担。