排序算法
-
如何分析一个“排序算法”?三个方面着手:
- 执行效率
- 最好情况,最坏情况,平均情况时间复杂度
- 时间复杂度的系数,常数,低阶
- 比较次数和交换(或移动)次数
- 内存消耗
- 原地排序,空间复杂度O(1)
- 稳定性
- 关注的是值相同的项,排序前后的先后顺序是否不变,一致则表示是稳定算法
-
排序比较
插入排序比冒泡排序高效--冒泡排序的数据交换有三个操作,插入排序数据移动只有一个操作,也就是复杂度系数低
排序算法 | 是否稳定 | 是否原地排序 | 最好情况 | 最坏情况 | 平均情况 |
冒泡排序 | 是 | 是 | O(n) | O(n2) | O(n2) |
插入排序 | 是 | 是 | O(n) | O(n2) | O(n2) |
选择排序 | 否 | 是 | O(n2) | O(n2) | O(n2) |
-
冒泡排序--操作相邻数据比较互换
-
插入排序--分已排序和未排序区间,每次从未排序取一项插入到已排序区间的合适位置(通过比较确定,比较过程中完成数据移动)
-
选择排序--分已排序和未排序区间,每次取未排序中最小项放到已排序区间末尾,比较取最小值的过程中完成数据移动
O(n)