选择排序-冒泡排序

小赛码/正式课/CPP/知识点

冒泡排序 vs 选择排序核心知识点总结


一、冒泡排序

1. 核心原理

  • 相邻元素两两比较,将较大值逐步"冒泡"到数组末端
  • 排序过程可视化VisuAlgo演示

2. 算法步骤

  1. 外层循环:控制排序轮次(N 个元素需要 N-1轮)
  2. 内层循环:每轮比较相邻元素
    • 升序排列:若前 > 后则交换
    • 每轮末尾元素确定最终位置
  3. 优化标志:可添加 swap_flag 减少无效遍历

3. 代码实现

def bubble_sort(arr):
    n = len(arr)
    for i in range(n-1):             # 控制轮次
        for j in range(n-1-i):       # 控制比较范围
            if arr[j] > arr[j+1]:    # 核心比较逻辑
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

4. 复杂度

类型 最优 平均 最差 空间
时间复杂度 O (n) O (n²) O (n²) O (1)

二、选择排序

1. 核心原理

  • 极值定位法:每轮找出未排序部分的极值元素

  • 生活类比:类似整理扑克牌时每次找最小牌排列

2. 算法步骤

  1. 外层循环:确定元素插入位置(从 0 到 N-2)

  2. 内层循环:遍历未排序部分寻找最小值索引

  3. 元素交换:将最小值与当前插入位置交换

3. 代码实现

 selection_sort(arr):
    n = len(arr)
    for i in range(n-1):            # 确定插入位置
        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

4. 复杂度

类型 最优 平均 最差 空间
时间复杂度 O (n²) O (n²) O (n²) O (1)

三、对比总结

特征项 冒泡排序 选择排序
核心机制 相邻元素交换 极值定位+单次交换
交换次数 O (n²)(频繁交换) O (n)(每轮仅交换一次)
posted @ 2025-12-20 05:01  stephen_zuo  阅读(2)  评论(0)    收藏  举报