408答疑
一、排序的基本概念
相关概念
- 定义:排序是将表中的元素按照关键字递增或递减的顺序重新排列的过程。
- 输入: n n n 个记录 R 1 , R 2 , ⋯ , R n R_1, R_2, \cdots, R_n R1,R2,⋯,Rn,对应关键字为 k 1 , k 2 , ⋯ , k n k_1, k_2, \cdots, k_n k1,k2,⋯,kn。
- 输出:输入序列的一个重排 R 1 ′ , R 2 ′ , ⋯ , R n ′ R'_1, R'_2, \cdots, R'_n R1′,R2′,⋯,Rn′,满足 k 1 ′ ≤ k 2 ′ ≤ ⋯ ≤ k n ′ k'_1 \leq k'_2 \leq \cdots \leq k'_n k1′≤k2′≤⋯≤kn′(“ ≤ \leq ≤”可替换为其他比较符号)。
- 稳定性:若待排序表中有两个元素
R
i
R_i
Ri 和
R
j
R_j
Rj,其对应的关键字相同,即
k
e
y
i
=
k
e
y
j
key_i = key_j
keyi=keyj,且在排序前
R
i
R_i
Ri 在
R
j
R_j
Rj 的前面,若使用某一排序算法排序后,
R
i
R_i
Ri 仍然在
R
j
R_j
Rj 的前面,则称这个排序算法是稳定的,否则称这个排序算法是不稳定的。
- 稳定性验证:例如,若输入序列为 ( 3 , 2 1 , 2 2 ) (3, 2_1, 2_2) (3,21,22)(下标表示初始顺序),排序后若为 ( 2 1 , 2 2 , 3 ) (2_1, 2_2, 3) (21,22,3),则算法稳定;若为 ( 2 2 , 2 1 , 3 ) (2_2, 2_1, 3) (22,21,3),则不稳定。
分类方式
排序算法可根据不同需求划分为以下类别:
-
根据数据存储位置
- 内部排序:排序期间所有元素完全存放在内存中。
- 外部排序:排序期间元素需在内、外存之间频繁移动(适用于数据量过大时)。
-
根据重复元素的相对位置是否变化
- 稳定排序:若排序前 R i R_i Ri 在 R j R_j Rj 前且 k i = k j k_i = k_j ki=kj,排序后 R i R_i Ri 仍在 R j R_j Rj 前。
- 不稳定排序:存在至少一组实例使得上述条件不成立。
-
根据时间复杂度
- 简单排序:时间复杂度高于 O ( n log 2 n ) O(n\log_2 n) O(nlog2n)(如直接插入排序)。
- 先进排序:时间复杂度为 O ( n log 2 n ) O(n\log_2 n) O(nlog2n) 或更低(如快速排序、归并排序)。
-
根据实现手段
- 插入排序、交换排序、选择排序、归并排序、基数排序。
算法性质
- 稳定性:稳定性不决定算法优劣,仅描述算法特性。若关键字唯一,稳定性无关紧要。
- 性能决定因素:
- 时间复杂度:主要由比较和移动操作的次数决定。
- 空间复杂度:排序过程中所需的额外存储空间。
内部排序的特点
- 核心操作:比较(确定元素顺序)和移动(调整元素位置)。
- 例外:基数排序不依赖比较操作。
- 适用性:大多数内部排序算法更适合顺序存储的线性表。
注意事项
- 对于不稳定排序算法,只需举出一组关键字实例即可证明其不稳定性。
- 不存在“全面最优”的排序算法,需根据具体场景(数据规模、存储方式等)选择合适算法。
九、参考资料
鲍鱼科技课件
b站免费王道课后题讲解:
网课全程班: