常用排序算法特点
选择排序
- 运行时间与元素输入顺序无关
- 元素移动次数最少
- 需要 N 2 / 2 N^2/2 N2/2次比较和 N N N次交换
插入排序
- 运行时间与元素插入顺序相关
- 平均运行情况: N 2 / 4 N^2/4 N2/4次比较+ N 2 / 4 N^2/4 N2/4次交换
- 最坏运行情况: N 2 / 2 N^2/2 N2/2次比较+ N 2 / 2 N^2/2 N2/2次交换
- 最好运行情况: N − 1 N-1 N−1次比较+ 0 0 0次交换
希尔排序
- 基于插入排序的快速排序算法
- 希尔排序比插入和选择排序要快,且数组越大,三者差距越大
- 不需要使用额外的内存空间
归并排序
- 保证排序所需时间与 N lg N N\lg N NlgN成正比
- 缺点为所需额外空间与 N N N成正比
注意:根据分治算法的思想,归并排序可以改进为自顶向下的归并排序,此时有
- 需要 1 2 N lg N \frac{1}{2}N\lg N 21NlgN至 N lg N N\lg N NlgN次比较
- 最多需要访问所有元素共 6 N lg N 6N\lg N 6NlgN次
此外,也可改进为自底向上的归并排序,同理有
- 需要 1 2 N lg N \frac{1}{2}N\lg N 21NlgN至 N lg N N\lg N NlgN次比较
- 最多需要访问所有元素共 6 N lg N 6N\lg N 6NlgN次
快速排序
- 排序效率取决于切分数组的效果
- 一般比归并排序和希尔排序快
- 为了避免切分不平衡导致排序算法低效,应在排序前将数组随机排序
在快速排序中,为了应对含有大量重复元素的排序需求时,应使用三向切分的快速排序方法进行排序,此时可以将排序时间从线性对数级降低到线性级别