选择排序

选择排序(Selection Sort)是一种简单的排序算法,其基本思想是每次从未排序部分中选择最小(或最大)元素,将其放到已排序部分的末尾。以下是对选择排序的详细讲解,以及在 Swift 中的实现示例。

选择排序的基本步骤

  1. 初始化:从数组的起始位置开始,假设第一个元素是最小值。

  2. 查找最小值

    • 遍历数组的未排序部分,找出最小值的索引。
  3. 交换

    • 将找到的最小值与未排序部分的第一个元素交换。
  4. 缩小未排序部分

    • 继续对剩余的未排序部分重复以上步骤,直到整个数组排序完成。

选择排序的时间复杂度

  • 时间复杂度:最坏、最好和平均时间复杂度均为 (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]

代码讲解

  1. 函数定义selectionSort 函数接受一个可变数组 array 作为参数。

  2. 外层循环for i in 0..<n:这个循环遍历数组的每一个元素,表示当前排序到的位置。

  3. 最小值寻找

    • 在内层循环 for j in (i + 1)..<n 中,遍历未排序部分来寻找最小值。
    • minIndex 用于记录当前最小值的索引。
  4. 交换元素

    • 如果 minIndex 发生变化,说明找到了更小的元素,使用 array.swapAt(i, minIndex) 进行交换。
  5. 示例用法:调用 selectionSort 函数并打印结果。

总结

选择排序是一种简单易懂的排序算法,尽管在实际应用中效率较低,但它的基本思想对于学习算法非常重要。选择排序的实现也很简单,适合用于小规模数据的排序。

posted @   looxy  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示