一、排序算法的稳定性
若待排序的记录序列中存在两个或两个以上的关键字相等的记录,排序结果可能存在不唯一的情况,由此给出稳定与不稳定的情况。
假设 k i = k j k_i = k_j ki=kj( 1 ≤ i ≤ n 1 \leq i \leq n 1≤i≤n, 1 ≤ j ≤ n 1 \leq j \leq n 1≤j≤n, i ≠ j i \neq j i=j),且在排序前的序列中 k i k_i ki 领先于 k j k_j kj(即 i< j)。如果排序后 k i k_i ki 仍领先于 k j k_j kj,则称所用的排序方法是稳定的;反之,称不稳定。就是说,对于序列中相同的数,在排序后还能否保持相对位置不变。
例如,序列 1,2,3,4,2,5 中有两个 2,若排序后第一个 2 还位于第二个 2 的左边,该算法就是稳定的;否则就是不稳定的。
稳定的排序算法:
冒泡排序、插入排序、归并排序、桶排序、计数排序和基数排序。
不稳定的排序算法:
选择排序、快速排序、希尔排序。
二、内排序与外排序
内排序——数据记录在内存中进行排序;
外排序——因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
常见的排序算法,如插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序、计数排序等,都是内排序。
三、时间复杂度:
(1)平方阶 ( O ( n 2 ) O(n ^ 2) O(n2)) ——插入排序、选择排序和冒泡排序;
(2)线性对数阶 ( O ( n l o g n ) O(nlogn) O(nlogn)) ——快速排序、希尔排序和归并排序;
(3)线性阶 ( O ( n ) O(n) O(n)) ——基数排序、计数排序和桶排序。