HB4-简单选择排序¶
代码实现¶
算法执行过程图解¶
复杂度分析¶
时间复杂度:O(n²)¶
详细分析:
-
外层循环:执行 n-1 次(i 从 0 到 n-2)
-
内层循环:
- 第1轮:比较 n-1 次
- 第2轮:比较 n-2 次
- 第3轮:比较 n-3 次
- ...
-
第n-1轮:比较 1 次
-
总比较次数:
Text Only -
交换次数:
- 最好情况:0 次交换(数组已有序)
- 最坏情况:n-1 次交换
-
平均情况:n-1 次交换
-
总体时间复杂度:O(n²)
空间复杂度:O(1)¶
- 只使用了常数个额外变量(pos, temp, i, j)
- 没有使用额外的存储空间
- 空间复杂度为 O(1)
关键知识点延伸¶
1. 算法特点¶
- 不稳定排序:相等元素的相对位置可能改变
- 原地排序:只需要常数级额外空间
- 交换次数少:最多进行 n-1 次交换
2. 稳定性问题示例¶
| Text Only | |
|---|---|
3. 与冒泡排序的比较¶
| 特性 | 选择排序 | 冒泡排序 |
|---|---|---|
| 比较次数 | n(n-1)/2 | n(n-1)/2 |
| 交换次数 | 最多n-1次 | 最多n(n-1)/2次 |
| 稳定性 | 不稳定 | 稳定 |
| 性能 | 相对较好 | 相对较差 |
4. 优化版本:双向选择排序¶
5. 适用场景¶
- 数据量小:实现简单,适合小规模数据
- 交换代价高:相比冒泡排序,交换次数更少
- 内存受限:原地排序,空间复杂度低
6. 算法改进建议¶
-
减少不必要的交换:
-
记录最大值:可以同时记录最大值位置,减少轮数
-
结合其他算法:对于小规模子数组使用选择排序