📜  选择排序 (1)

📅  最后修改于: 2023-12-03 14:58:00.836000             🧑  作者: Mango

选择排序(Selection Sort)

选择排序是一种简单直观的排序算法,其基本思想是将待排序序列分为已排序区间和未排序区间,每次从未排序区间中选择最小的元素,将其放到已排序区间的末尾。重复以上步骤,直到未排序区间变空。

算法流程
  1. 初始化序列:将序列的第一个元素标记为已排序区间,其余元素标记为未排序区间。
  2. 从未排序区间中选择最小的元素,然后与未排序区间的第一个元素交换位置。
  3. 将交换后未排序区间的第一个元素标记为已排序区间的末尾,重复第2步和第3步,直到未排序区间变空。
代码实现

以下是选择排序的 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)$,其中 $n$ 是序列长度。虽然时间复杂度很高,但选择排序的空间复杂度为 $O(1)$,是一种原地排序算法,不需要额外的存储空间。

稳定性

选择排序是一种不稳定的排序算法,因为在交换元素的过程中,可能会改变相等元素之间的相对顺序。例如,对序列 {3, 2, 3, 1} 进行选择排序,第一个 3 会和 1 交换位置,导致第二个 3 和 1 的相对顺序发生变化。