1. 冒泡排序法 (Bubble Sort)
算法思想:重复遍历数组,比较相邻元素,如果逆序就交换,使较大元素逐渐"冒泡"到末尾。
以数组 [5, 3, 8, 4, 2] 为例(升序排序):
第一轮遍历:
-
比较 5 和 3:5>3,交换 → [3, 5, 8, 4, 2]
-
比较 5 和 8:5<8,不交换 → [3, 5, 8, 4, 2]
-
比较 8 和 4:8>4,交换 → [3, 5, 4, 8, 2]
-
比较 8 和 2:8>2,交换 → [3, 5, 4, 2, 8]
第一轮结束,最大的数8已经到位
第二轮遍历:
-
比较 3 和 5:3<5,不交换 → [3, 5, 4, 2, 8]
-
比较 5 和 4:5>4,交换 → [3, 4, 5, 2, 8]
-
比较 5 和 2:5>2,交换 → [3, 4, 2, 5, 8]
第二轮结束,第二大的数5已经到位
第三轮遍历:
-
比较 3 和 4:3<4,不交换 → [3, 4, 2, 5, 8]
-
比较 4 和 2:4>2,交换 → [3, 2, 4, 5, 8]
第三轮结束,第三大的数4已经到位
第四轮遍历:
- 比较 3 和 2:3>2,交换 → [2, 3, 4, 5, 8]
第四轮结束,全部排序完成
2. 选择排序法 (Selection Sort)
算法思想:每次遍历找到最小元素,放到已排序序列的末尾。
以数组 [5, 3, 8, 4, 2] 为例:
第一轮遍历:
-
在 [5,3,8,4,2] 中找到最小值 2
-
将最小值 2 与第一个元素 5 交换 → [2, 3, 8, 4, 5]
第一轮结束,最小值2已放在正确位置
第二轮遍历:
-
在 [3,8,4,5] 中找到最小值 3
-
3已经在正确位置,不交换 → [2, 3, 8, 4, 5]
第二轮结束,第二小值3已放在正确位置
第三轮遍历:
-
在 [8,4,5] 中找到最小值 4
-
将最小值 4 与第三个元素 8 交换 → [2, 3, 4, 8, 5]
第三轮结束,第三小值4已放在正确位置
第四轮遍历:
-
在 [8,5] 中找到最小值 5
-
将最小值 5 与第四个元素 8 交换 → [2, 3, 4, 5, 8]
第四轮结束,全部排序完成
3. 插入排序法 (Insertion Sort)
算法思想:将每个元素插入到已排序序列中的正确位置。
以数组 [5, 3, 8, 4, 2] 为例:
初始状态: 已排序部分 [5],未排序部分 [3,8,4,2]
第一轮插入:
-
取出 3,与已排序部分 [5] 比较
-
3 < 5,将5右移,插入3 → [3, 5, 8, 4, 2]
现在已排序部分为 [3,5]
第二轮插入:
-
取出 8,与已排序部分 [3,5] 比较
-
8 > 5,直接插入末尾 → [3, 5, 8, 4, 2]
现在已排序部分为 [3,5,8]
第三轮插入:
-
取出 4,与已排序部分 [3,5,8] 比较
-
4 < 8,8右移 → [3, 5, 8, 8, 2]
-
4 < 5,5右移 → [3, 5, 5, 8, 2]
-
4 > 3,插入到3后面 → [3, 4, 5, 8, 2]
现在已排序部分为 [3,4,5,8]
第四轮插入:
-
取出 2,与已排序部分 [3,4,5,8] 比较
-
2 < 8,8右移 → [3, 4, 5, 8, 8]
-
2 < 5,5右移 → [3, 4, 5, 5, 8]
-
2 < 4,4右移 → [3, 4, 4, 5, 8]
-
2 < 3,3右移 → [3, 3, 4, 5, 8]
-
插入2到开头 → [2, 3, 4, 5, 8]
全部排序完成
4. 交换排序法 (Exchange Sort)
算法思想:每个元素与后面所有元素比较,发现逆序立即交换。
以数组 [5, 3, 8, 4, 2] 为例:
第一轮(处理第一个元素5):
-
比较 5 和 3:5>3,交换 → [3, 5, 8, 4, 2]
-
比较 3 和 8:3<8,不交换 → [3, 5, 8, 4, 2]
-
比较 3 和 4:3<4,不交换 → [3, 5, 8, 4, 2]
-
比较 3 和 2:3>2,交换 → [2, 5, 8, 4, 3]
第一个元素2已是最小值
第二轮(处理第二个元素5):
-
比较 5 和 8:5<8,不交换 → [2, 5, 8, 4, 3]
-
比较 5 和 4:5>4,交换 → [2, 4, 8, 5, 3]
-
比较 4 和 3:4>3,交换 → [2, 3, 8, 5, 4]
第二个元素3已是第二小值
第三轮(处理第三个元素8):
-
比较 8 和 5:8>5,交换 → [2, 3, 5, 8, 4]
-
比较 5 和 4:5>4,交换 → [2, 3, 4, 8, 5]
第三个元素4已是第三小值
第四轮(处理第四个元素8):
- 比较 8 和 5:8>5,交换 → [2, 3, 4, 5, 8]
全部排序完成
总结比较
| 排序算法 | 平均时间复杂度 | 特点 |
|---|---|---|
| 冒泡排序 | O(n²) | 稳定,相邻元素比较交换 |
| 选择排序 | O(n²) | 不稳定,每次选最小元素 |
| 插入排序 | O(n²) | 稳定,适合小规模数据 |
| 交换排序 | O(n²) | 简单但效率低 |