归并排序
2024年04月03日
一、认识
归并排序英文称为Merge Sort
,归并排序是建立在归并操作上的一种有效的排序算法。归并排序有两种实现方法:自底向上和自顶向下。
特点:
- 稳定排序: 如果 a 原本在 b 的前面,且
a == b
,排序之后 a 仍然在 b 的前面 - 非原地排序: 需要利用额外的数组来辅助排序。
- 排序方式: Out-place (占用额外内存)
- 时间复杂度: O(n) [n 代表数据规模及数据量大小]
- 空间复杂度: O(n)
扩展:
- 排序算法的稳定性:
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i] = r[j]
,且 r[i] 在 r[j] 之前,而在排序后的序列中,r[i] 仍在 r[j] 之前,则称这种排序算法是稳定的;否则称为不稳定的。
那么排序算法的稳定性有什么意义呢?其实它只在一种情况下有意义:当要排序的内容是一个对象的多个属性,且其原本的顺序存在意义时,如果我们需要在二次排序后保持原有排序的意义,就需要使用到稳定性的算法。
二、思想
归并排序思想:
将 1 个数字组成的有序数组合并成一个包含 2 个数字的有序数组,再将 2 个数字组成的有序数组合并成包含 4 个数字的有序数组...直到整个数组排序完成