Python 算法教程(2):选择排序详解

前言

选择排序(Selection Sort)是最简单的排序算法之一,虽然效率不高,但理解它有助于学习更高级的排序。

一、算法原理

核心思想

每次从未排序部分找到最小元素,放到已排序部分末尾。

动画演示

初始:[64, 25, 12, 22, 11]
第 1 轮:找到 11,交换 64→[11, 25, 12, 22, 64]
第 2 轮:找到 12,交换 25→[11, 12, 25, 22, 64]
第 3 轮:找到 22,交换 25→[11, 12, 22, 25, 64]
结果:[11, 12, 22, 25, 64]

二、代码实现

基础版本

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

优化版本(减少交换)

def selection_sort_optimized(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
        if min_idx != i:  # 只在需要时交换
            arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

三、复杂度分析

情况 时间 空间 稳定性
最好 O(n²) O(1) 不稳定
平均 O(n²) O(1) 不稳定
最坏 O(n²) O(1) 不稳定

四、与冒泡排序对比

对比项      冒泡排序    选择排序
比较次数    O(n²)      O(n²)
交换次数    O(n²)      O(n)
稳定性      稳定       不稳定
效率        较低       略高

五、面试考点

  1. 时间复杂度?O(n²) 所有情况
  2. 稳定吗?不稳定
  3. 交换次数?最多 n-1 次
  4. 何时使用?教学、小规模数据

总结

选择排序简单易懂,但效率低,实际应用中建议使用快速排序或归并排序。

下一篇:插入排序

发表回复

后才能评论