尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

简洁思维:python实现插入排序、冒泡排序和选择排序

简洁思维:python实现插入排序、冒泡排序和选择排序
📅 发布时间:2026/6/20 8:44:39

一、插入排序(Insertion Sort)
实现思路:
插入排序的核心思想是:将数组分为「已排序区间」和「未排序区间」,初始时已排序区间只有第一个元素。然后依次从未排序区间中取出元素,插入到已排序区间的合适位置(保证已排序区间始终有序),重复此过程直到未排序区间为空。
类比生活中整理扑克牌:抓牌时,每抓一张就按大小插入到手中已有序的牌堆里。

`
def insertion_sort(arr):

遍历未排序区间(从第二个元素开始,索引1到末尾)

for i in range(1, len(arr)):# 当前要插入的元素(未排序区间的第一个元素)current = arr[i]# 已排序区间的末尾索引(初始为i-1)j = i - 1# 在已排序区间中找到current的插入位置# 若j >=0且已排序元素大于current,将其右移一位while j >= 0 and arr[j] > current:arr[j + 1] = arr[j]  # 元素右移j -= 1# 将current插入到正确位置(j+1是插入索引)arr[j + 1] = current
return arr

`

代码详解:
外层循环 for i in range(1, len(arr)):从索引 1 开始(第一个元素默认有序),依次处理未排序区间的元素。
current = arr[i]:记录当前要插入的元素(避免后续移位时被覆盖)。
内层循环 while j >= 0 and arr[j] > current:从已排序区间的末尾向前遍历,若元素大于current,则将其右移一位(为current腾出位置)。
arr[j + 1] = current:当找到小于等于current的元素(或已遍历完已排序区间),将current插入到该元素的右侧(j+1位置)。
特点:稳定排序(相等元素相对位置不变),
时间复杂度 O(n^2)(最坏 / 平均),
空间复杂度 O(1)(原地排序)。

二、冒泡排序(Bubble Sort)
实现思路:
冒泡排序的核心思想是:重复遍历数组,每次比较相邻的两个元素,若顺序错误则交换它们。每一轮遍历会将最大的元素 “冒泡” 到数组末尾(如同水中气泡上浮),重复n-1轮后数组有序。
优化点:若某一轮遍历中没有发生交换,说明数组已完全有序,可提前退出。

def bubble_sort(arr): n = len(arr) # 外层循环控制需要多少轮(最多n-1轮) for i in range(n - 1): swapped = False # 标记本轮是否发生交换 # 内层循环比较相邻元素(每轮后最大元素已到位,无需再比较) for j in range(n - 1 - i): # 若前一个元素大于后一个,交换它们 if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] swapped = True # 若本轮无交换,说明数组已有序,提前退出 if not swapped: break return arr

代码详解:
外层循环 for i in range(n - 1):最多需要n-1轮(每轮确定一个最大元素的位置)。
swapped 标记:用于优化,若某轮未交换元素,说明数组已有序,直接退出。
内层循环 for j in range(n - 1 - i):每轮比较范围随i增大而减小(因为末尾i个元素已排好序)。
交换操作 arr[j], arr[j + 1] = ...:相邻元素逆序时交换,确保大元素 “上浮” 到右侧。
特点:稳定排序,时间复杂度 (O(n^2))(最坏 / 平均)、(O(n))(最好,已排序时),空间复杂度 (O(1))(原地排序)。

三、选择排序(Selection Sort)
实现思路
选择排序的核心思想是:将数组分为「已排序区间」和「未排序区间」,初始时已排序区间为空。每一轮从未排序区间中找到最小元素,将其与未排序区间的第一个元素交换,此时该元素加入已排序区间,重复n-1轮后数组有序。
类比生活中挑苹果:每次从一堆苹果里挑出最小的,放到已选好的一堆的末尾。

def selection_sort(arr): n = len(arr) # 外层循环控制已排序区间的末尾(最多到n-2,最后一个元素自动有序) for i in range(n - 1): # 记录未排序区间中最小元素的索引(初始假设第一个元素最小) min_index = i # 遍历未排序区间,找到真正的最小元素索引 for j in range(i + 1, n): if arr[j] < arr[min_index]: min_index = j # 将最小元素与未排序区间的第一个元素交换 arr[i], arr[min_index] = arr[min_index], arr[i] return arr

代码详解:
外层循环 for i in range(n - 1):i 是已排序区间的末尾索引(初始为 0,每轮扩展 1 位)。min_index = i:假设未排序区间的第一个元素(arr[i])是最小的。
内层循环 for j in range(i + 1, n):遍历未排序区间的剩余元素,更新min_index为真正的最小元素索引。
交换操作 arr[i], arr[min_index] = ...:将最小元素放到已排序区间的末尾(i位置)。
特点:不稳定排序(相等元素可能因交换改变相对位置),时间复杂度 (O(n^2))(所有情况),空间复杂度 (O(1))(原地排序)。

相关新闻

  • 2025 年 11 月不锈钢酸洗钝化液厂家推荐排行榜,环保型不锈钢管酸洗钝化液,不锈钢清洗钝化液,酸洗钝化处理与不锈钢清洗剂公司推荐
  • 2025 年 11 月 Type-C 连接器厂家推荐排行榜,Type-C 连接器分析,Type-C 连接器模具,高性能连接方案专业制造商精选
  • 2025年深圳保税区域一日游机构权威推荐榜单:综合保税区域一日游/保税地区一日游/保税区一日游源头机构精选

最新新闻

  • 2026 武汉本地正规瓷砖空鼓维修服务商盘点|无损免拆砖修复,全域上门售后有保障 - 宅安选房屋修缮
  • 动态主题建模中的异常值识别与前瞻信号分析
  • Qwen2.5-VL工业多模态微调实战:特殊行业数据适配指南
  • STM32 串口DMA+IDLE中断实战:高效数据帧接收与协议解析
  • 术语俗话 --- 驱动/固件/软件
  • 中原卖黄金避坑要点,实体店资质辨别教程合扬全程公开鉴价 - 奢侈品交易观察员

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号