排序稳定性
待排的序列中,可能会存在两个或者两个以上的关键字相等的记录,排序结果可能会存在不唯一的情况,我们给出稳定与不稳定排序的定义: 假设ki=kj(1<=i<=n,1<=j<=n,i!=j),如果排序中i<j,排序后ri<rj,则方法稳定,反之,不稳定。 排序算法是否稳定,需要通过分析后才能得出。
例如:
| 编号 | 姓名 | 分数 |
|---|---|---|
| 1 | A | 92 |
| 2 | B | 98 |
| 3 | C | 92 |
稳定排序:
| 编号 | 姓名 | 分数 |
|---|---|---|
| 2 | B | 98 |
| 1 | A | 92 |
| 3 | C | 92 |
不稳定排序
| 编号 | 姓名 | 分数 |
|---|---|---|
| 2 | B | 98 |
| 3 | C | 92 |
| 1 | A | 92 |
内排序外排序
内排序:在排序过程中,排序的所有记录都全部放在内存中。
外排序:排序的记录太多,不能同事放在内存中,需要内外存多次交换数据才能完成。
内排序
内排序的排序算法主要受三个方面的影响:
- 时间性能
- 辅助空间
- 算法的复杂性
总结
内排主要有两种操作:比较和移动,
根据排序中借助的主要操作,我们把排序分为:插入排序、交换排序、选择排序、归并排序
根据算法的复杂度来分:
简单算法:
- 冒泡排序
- 简单选择排序
- 直接插入排序顺序
改进算法:
- 希尔排序
- 堆排序
- 归并排序
- 快速排序