选择排序

选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。以下是选择排序的详细介绍:

1. 算法步骤

  1. 初始状态:假设有一个长度为 n 的数组 arr,待排序的元素集合为整个数组。
  2. 第一趟排序
    • 从数组的第一个元素开始,将其视为当前最小元素,记录其索引。
    • 遍历数组中剩余的元素,与当前最小元素比较。如果找到比当前最小元素更小的元素,则更新最小元素及其索引。
    • 遍历结束后,将找到的最小元素与数组的第一个位置的元素交换位置。此时,数组的第一个元素就是整个数组中的最小元素,即已完成第一个位置的排序。
  3. 后续排序
    • 对数组中从第二个元素开始到最后一个元素的子数组重复上述步骤。每次找到子数组中的最小元素,并将其与子数组的起始位置元素交换。
    • 每完成一趟排序,已排序的元素个数就增加一个,待排序的子数组长度就减少一个。
  4. 最终状态:经过 n - 1 趟排序后,整个数组就被排好序了。

2. 代码实现

下面是Python语言实现选择排序的代码:

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_index = i
        for j in range(i + 1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr

3. 算法分析

  • 时间复杂度:选择排序的时间复杂度是 \(O(n^2)\),因为无论数组的初始状态如何,都需要进行 \(n - 1\) 趟比较,每趟比较的次数依次为 \(n - 1\), \(n - 2\),..., 1,总的比较次数为 \(1 + 2 +... + (n - 1) = \frac{n(n - 1)}{2}\)
  • 空间复杂度:选择排序的空间复杂度是 \(O(1)\),因为它只需要有限的额外空间来进行交换操作,不需要与输入规模相关的额外空间。
  • 稳定性:选择排序是一种不稳定的排序算法。例如,对于数组 [5,5,3],在排序过程中,第一个 5 可能会与 3 交换位置,导致两个 5 的相对顺序发生改变。
posted @   codersgl  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示