选择排序
选择排序(Selection Sort)是一种简单的排序算法,其基本思想是每次从未排序部分中选择最小(或最大)元素,将其放到已排序部分的末尾。以下是对选择排序的详细讲解,以及在 Swift 中的实现示例。
选择排序的基本步骤
-
初始化:从数组的起始位置开始,假设第一个元素是最小值。
-
查找最小值:
- 遍历数组的未排序部分,找出最小值的索引。
-
交换:
- 将找到的最小值与未排序部分的第一个元素交换。
-
缩小未排序部分:
- 继续对剩余的未排序部分重复以上步骤,直到整个数组排序完成。
选择排序的时间复杂度
- 时间复杂度:最坏、最好和平均时间复杂度均为 (O(n^2)),因为每次选择最小值都需要遍历未排序部分。
- 空间复杂度:(O(1)),因为只需要常量级的额外空间。
Swift 实现
以下是选择排序的 Swift 实现代码:
func selectionSort(_ array: inout [Int]) {
let n = array.count
// 外层循环:每次确定一个位置
for i in 0..<n {
// 假设当前元素为最小值
var minIndex = i
// 内层循环:寻找未排序部分的最小值
for j in (i + 1)..<n {
if array[j] < array[minIndex] {
minIndex = j // 记录最小值的索引
}
}
// 交换当前元素和找到的最小值
if minIndex != i {
array.swapAt(i, minIndex)
}
}
}
// 示例用法
var numbers = [64, 25, 12, 22, 11]
selectionSort(&numbers)
print(numbers) // 输出: [11, 12, 22, 25, 64]
代码讲解
-
函数定义:
selectionSort
函数接受一个可变数组array
作为参数。 -
外层循环:
for i in 0..<n
:这个循环遍历数组的每一个元素,表示当前排序到的位置。 -
最小值寻找:
- 在内层循环
for j in (i + 1)..<n
中,遍历未排序部分来寻找最小值。 minIndex
用于记录当前最小值的索引。
- 在内层循环
-
交换元素:
- 如果
minIndex
发生变化,说明找到了更小的元素,使用array.swapAt(i, minIndex)
进行交换。
- 如果
-
示例用法:调用
selectionSort
函数并打印结果。
总结
选择排序是一种简单易懂的排序算法,尽管在实际应用中效率较低,但它的基本思想对于学习算法非常重要。选择排序的实现也很简单,适合用于小规模数据的排序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具