当前位置: 首页 > news >正文

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

一、插入排序(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))(原地排序)。

http://www.jsqmd.com/news/34926/

相关文章:

  • 2025 年 11 月不锈钢酸洗钝化液厂家推荐排行榜,环保型不锈钢管酸洗钝化液,不锈钢清洗钝化液,酸洗钝化处理与不锈钢清洗剂公司推荐
  • 价值权衡范式:环境-价值体系-规则体系
  • 2025 年 11 月 Type-C 连接器厂家推荐排行榜,Type-C 连接器分析,Type-C 连接器模具,高性能连接方案专业制造商精选
  • 深入理解计算机启动流程:从按下电源到操作系统加载
  • 2025年深圳保税区域一日游机构权威推荐榜单:综合保税区域一日游/保税地区一日游/保税区一日游源头机构精选
  • 2025 年 11 月 TYPE-C 母座 2PIN 厂家推荐排行榜,TYPE-C 母座,2PIN TYPE-C 母座,TYPE-C 2PIN 连接器优质供应商精选
  • 2025 年 11 月氢气检测仪厂家推荐排行榜,在线式氢气检测仪,固定式氢气检测仪,便携式氢气检测仪,手持式氢气检测仪公司推荐
  • 2025 年 11 月工作服厂家推荐排行榜,防静电/劳保/国网/餐厅/工厂/电工/防酸碱/电力/车间/航空/员工工作服,文化衫/t恤/polo衫/冲锋衣/t恤衫公司推荐
  • 2025 年 11 月卖得好的学习机品牌推荐:市场榜五强评测
  • 2025年户外广播喇叭生产厂家权威推荐榜单:户外扩音喇叭/户外的喇叭/户外高音喇叭源头厂家精选
  • 2025 年 11 月不锈钢水箱厂家推荐排行榜,不锈钢方形水箱,组合式水箱,消防水箱,生活水箱,保温水箱,承压水箱,不锈钢水塔公司推荐
  • OCX与C# 之二:初始OCX
  • python:python执行js
  • flask:模板用extends扩充页面内容
  • 详细介绍:深度解析 Spring Boot 应用 Logback 初始化失败问题:从报错定位到彻底解决
  • flask: 用模板渲染html页面
  • 2025 年 11 月冷链运输厂家推荐排行榜,药品/临床样本/CAR-T/蛋白/诊断试剂/医药/生物/血液/细胞/芯片运输,冷藏车/冷藏箱/保温箱,干冰/液氮运输公司推荐
  • flask: 模板用include包含公共部分header\footer
  • 轻量高效!一款轻量级的自托管服务器监控工具!
  • flask: 用blue_print使控制器文件独立,不再保存在一个文件中
  • 深入解析:SaaS 安全架构
  • flask: 处理路由错误
  • 2025年广州消泡剂TSF-825公司权威推荐榜单:消泡剂681F/消泡剂S600/消泡剂691F源头公司家精选
  • 2025 年 11 月实木家具厂家推荐排行榜,实木/原木/全实木/北美黑胡桃/樱桃木/榫卯工艺/高端定制/全屋整装,烘干/白胚/木蜡油/保养服务口碑之选
  • 《Learn Python Programming(4th)》读后感
  • OCX与C# 之一:初始OCX
  • MCU_WatchDog:独立与窗口看门狗解析 - 详解
  • 2025 年 11 月 VOC 检测仪厂家推荐排行榜,在线式 VOC,固定式 VOC,便携式 VOC,手持式 VOC,工业 VOC 检测仪公司推荐
  • 2025 年 11 月工业甲醛检测仪厂家推荐排行榜:在线式,固定式,便携式,手持式甲醛检测仪公司推荐,专业精准助力环境安全监测
  • 换医生的好处