📜  选择排序(1)

📅  最后修改于: 2023-12-03 15:28:21.846000             🧑  作者: Mango

选择排序(Selection Sort)

选择排序是一种简单直观的排序算法,它的基本思想是每一次从待排序的数据元素中选择最小(或最大)的一个元素作为起始元素,然后再从剩余未排序的元素中继续选择最小(或最大)的元素,直到全部排序完成。

算法步骤
  1. 初始状态:无序区为整个数组,有序区为空。
  2. 在无序区中选取一个最小值,存放到有序区的末尾。
  3. 重复第2步,直到无序区为空。
代码实现

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

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_idx = i
        for j in range(i+1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr
算法分析
时间复杂度

最好情况下,时间复杂度为 $O(n^2)$。无论数据原始排列方式如何,都需要经过 $\frac{n(n-1)}{2}$ 次比较和 $\frac{n(n-1)}{2}$ 次交换。所以其时间复杂度为 $O(n^2)$。

稳定性

选择排序不是稳定排序算法。例如 [5, 5, 3] 就会在排序后变成 [3, 5, 5]。

空间复杂度

选择排序算法的空间复杂度为 $O(1)$。