1. 分类
2. 7种内排序算法的各种指标
排序方法 |
平均情况 |
最好情况 |
最坏情况 |
辅助空间 |
稳定性 |
移动次数的平均情况 |
移动次数的最好情况 |
移动次数的最坏情况 |
冒泡排序 |
O(n2) |
O(n) |
O(n2) |
O(1) |
稳定 |
O(n2) |
0 |
O(n2) |
简单选择排序 |
O(n2) |
O(n2) |
O(n2) |
O(1) |
稳定 |
O(n) |
0 |
O(n) |
直接插入排序 |
O(n2) |
O(n) |
O(n2) |
O(1) |
稳定 |
O(n2) |
O(n) |
O(n2) |
希尔排序 |
O(nlogn)~O(n2) |
O(n1.3) |
O(n2) |
O(1) |
不稳定 |
|||
堆排序 |
O(nlogn) |
O(nlogn) |
O(nlogn) |
O(1) |
不稳定 |
|||
归并排序 |
O(nlogn) |
O(nlogn) |
O(nlogn) |
O(n) |
稳定 |
|||
快速排序 |
O(nlogn) |
O(nlogn) |
O(n2) |
O(logn)~O(n) |
不稳定 |
3. 分析(“>”表示优于)
从平均情况看:
堆排序、归并排序、快速排序 > 希尔排序 > 简单算法
从最好情况看:
冒泡排序、直接插入排序 > 其它算法
从最坏情况看:
堆排序、归并排序 > 其它算法
从空间复杂度看:
简单算法、希尔排序、堆排序 > 快速排序 > 归并排序
从稳定性看:
简单算法、归并排序 > 希尔排序、堆排序、快速排序
从移动次数的平均情况看:
简单选择排序 > 冒泡排序、直接插入排序
从移动次数的最好情况看:
简单选择排序、冒泡排序 > 直接插入排序
从移动次数的最坏情况看:
简单选择排序 > 冒泡排序、直接插入排序
4. 结论
- 堆排序和归并排序发挥稳定,快速排序最坏情况时发挥较差;
- 如果待排序序列总是基本有序,应选择简单算法;
- 如果对内存使用量有要求(即对空间大小有要求),不应选择归并排序和快速排序;
- 如果对排序稳定性有要求,应选择简单算法或归并排序;
- 如果待排序记录的个数n越小,应采用简单算法,反之,n越大,应选择改进算法;
- 如果数据量不大但记录的关键字信息量较大,应选择简单选择排序(在简单算法中),因为当记录的关键字本身信息量较大时,其占用存储空间较大,在移动记录时所花费的时间就越多,另外,记录的关键字信息量大小对改进算法影响不大;
- 从综合各项指标来说,经过优化的快速排序是性能最好的排序算法。
时间: 2024-10-25 13:04:36