交换排序法&冒泡排序法& 选择排序法&插入排序的算法步骤

1. 冒泡排序法 (Bubble Sort)

算法思想:重复遍历数组,比较相邻元素,如果逆序就交换,使较大元素逐渐"冒泡"到末尾。

以数组 5, 3, 8, 4, 2 为例(升序排序):

第一轮遍历:

  • 比较 5 和 3:5>3,交换 → 3, 5, 8, 4, 2

  • 比较 5 和 8:5<8,不交换 → 3, 5, 8, 4, 2

  • 比较 8 和 4:8>4,交换 → 3, 5, 4, 8, 2

  • 比较 8 和 2:8>2,交换 → 3, 5, 4, 2, 8
    第一轮结束,最大的数8已经到位

第二轮遍历:

  • 比较 3 和 5:3<5,不交换 → 3, 5, 4, 2, 8

  • 比较 5 和 4:5>4,交换 → 3, 4, 5, 2, 8

  • 比较 5 和 2:5>2,交换 → 3, 4, 2, 5, 8
    第二轮结束,第二大的数5已经到位

第三轮遍历:

  • 比较 3 和 4:3<4,不交换 → 3, 4, 2, 5, 8

  • 比较 4 和 2:4>2,交换 → 3, 2, 4, 5, 8
    第三轮结束,第三大的数4已经到位

第四轮遍历:

  • 比较 3 和 2:3>2,交换 → 2, 3, 4, 5, 8
    第四轮结束,全部排序完成

2. 选择排序法 (Selection Sort)

算法思想:每次遍历找到最小元素,放到已排序序列的末尾。

以数组 5, 3, 8, 4, 2 为例:

第一轮遍历:

  • 5,3,8,4,2 中找到最小值 2

  • 将最小值 2 与第一个元素 5 交换 → 2, 3, 8, 4, 5
    第一轮结束,最小值2已放在正确位置

第二轮遍历:

  • 3,8,4,5 中找到最小值 3

  • 3已经在正确位置,不交换 → 2, 3, 8, 4, 5
    第二轮结束,第二小值3已放在正确位置

第三轮遍历:

  • 8,4,5 中找到最小值 4

  • 将最小值 4 与第三个元素 8 交换 → 2, 3, 4, 8, 5
    第三轮结束,第三小值4已放在正确位置

第四轮遍历:

  • 8,5 中找到最小值 5

  • 将最小值 5 与第四个元素 8 交换 → 2, 3, 4, 5, 8
    第四轮结束,全部排序完成


3. 插入排序法 (Insertion Sort)

算法思想:将每个元素插入到已排序序列中的正确位置。

以数组 5, 3, 8, 4, 2 为例:

初始状态: 已排序部分 5,未排序部分 3,8,4,2

第一轮插入:

  • 取出 3,与已排序部分 5 比较

  • 3 < 5,将5右移,插入3 → 3, 5, 8, 4, 2
    现在已排序部分为 3,5

第二轮插入:

  • 取出 8,与已排序部分 3,5 比较

  • 8 > 5,直接插入末尾 → 3, 5, 8, 4, 2
    现在已排序部分为 3,5,8

第三轮插入:

  • 取出 4,与已排序部分 3,5,8 比较

  • 4 < 8,8右移 → 3, 5, 8, 8, 2

  • 4 < 5,5右移 → 3, 5, 5, 8, 2

  • 4 > 3,插入到3后面 → 3, 4, 5, 8, 2
    现在已排序部分为 3,4,5,8

第四轮插入:

  • 取出 2,与已排序部分 3,4,5,8 比较

  • 2 < 8,8右移 → 3, 4, 5, 8, 8

  • 2 < 5,5右移 → 3, 4, 5, 5, 8

  • 2 < 4,4右移 → 3, 4, 4, 5, 8

  • 2 < 3,3右移 → 3, 3, 4, 5, 8

  • 插入2到开头 → 2, 3, 4, 5, 8
    全部排序完成


4. 交换排序法 (Exchange Sort)

算法思想:每个元素与后面所有元素比较,发现逆序立即交换。

以数组 5, 3, 8, 4, 2 为例:

第一轮(处理第一个元素5):

  • 比较 5 和 3:5>3,交换 → 3, 5, 8, 4, 2

  • 比较 3 和 8:3<8,不交换 → 3, 5, 8, 4, 2

  • 比较 3 和 4:3<4,不交换 → 3, 5, 8, 4, 2

  • 比较 3 和 2:3>2,交换 → 2, 5, 8, 4, 3
    第一个元素2已是最小值

第二轮(处理第二个元素5):

  • 比较 5 和 8:5<8,不交换 → 2, 5, 8, 4, 3

  • 比较 5 和 4:5>4,交换 → 2, 4, 8, 5, 3

  • 比较 4 和 3:4>3,交换 → 2, 3, 8, 5, 4
    第二个元素3已是第二小值

第三轮(处理第三个元素8):

  • 比较 8 和 5:8>5,交换 → 2, 3, 5, 8, 4

  • 比较 5 和 4:5>4,交换 → 2, 3, 4, 8, 5
    第三个元素4已是第三小值

第四轮(处理第四个元素8):

  • 比较 8 和 5:8>5,交换 → 2, 3, 4, 5, 8
    全部排序完成

总结比较

排序算法 平均时间复杂度 特点
冒泡排序 O(n²) 稳定,相邻元素比较交换
选择排序 O(n²) 不稳定,每次选最小元素
插入排序 O(n²) 稳定,适合小规模数据
交换排序 O(n²) 简单但效率低
相关推荐
2601_962218613 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
吞下星星的少年·-·3 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime4 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
和裕6 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技6 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
Msshu1237 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
shirsl7 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
土司大王8 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树
2601_962218618 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
那年窗外下的雪.9 小时前
AIDC 学习日志|第 22 天|All-Active/Single-Active 故障演练设计
服务器·网络·学习·算法·哈希算法