Golang学习-冒泡排序(Bubble Sort)
冒泡排序Bubble Sort一、算法思想冒泡排序的核心思想非常朴素相邻元素两两比较如果前一个比后一个大就交换它们。每一轮冒泡都会把当前未排序部分的最大值浮到最右端——就像气泡从水底往上冒一样这就是名称的由来。以[5, 3, 8, 1, 2]为例第一轮冒泡的过程[5, 3, 8, 1, 2] 比较 5 和 3 → 53交换 [3, 5, 8, 1, 2] 比较 5 和 8 → 58不交换 [3, 5, 8, 1, 2] 比较 8 和 1 → 81交换 [3, 5, 1, 8, 2] 比较 8 和 2 → 82交换 [3, 5, 1, 2, 8] ← 8 已冒泡到最右端第二轮继续在[3, 5, 1, 2]中冒泡把次大值 5 推到倒数第二位……以此类推n 个元素最多需要 n-1 轮冒泡。二、Go 实现2.1 基础版本packagemainimportfmt// BubbleSort 基础冒泡排序funcBubbleSort(arr[]int){n:len(arr)fori:0;in-1;i{// 外层控制冒泡轮数forj:0;jn-i-1;j{// 内层每轮比较范围逐渐缩小ifarr[j]arr[j1]{// 相邻比较左大右小就交换arr[j],arr[j1]arr[j1],arr[j]}}}}funcmain(){arr:[]int{5,3,8,1,2,7,4,6}fmt.Println(排序前:,arr)BubbleSort(arr)fmt.Println(排序后:,arr)}运行结果排序前: [5 3 8 1 2 7 4 6] 排序后: [1 2 3 4 5 6 7 8]2.2 优化版本提前终止如果某一轮冒泡过程中没有发生任何交换说明数组已经排好序了没必要继续后续轮次。我们可以用一个swapped标记来检测这种情况。// BubbleSortOptimized 优化冒泡排序提前终止funcBubbleSortOptimized(arr[]int){n:len(arr)fori:0;in-1;i{swapped:falseforj:0;jn-i-1;j{ifarr[j]arr[j1]{arr[j],arr[j1]arr[j1],arr[j]swappedtrue}}if!swapped{// 这一轮没有交换数组已有序break}}}对于已经排好序的数组[1, 2, 3, 4, 5]优化版只需要一轮就检测到没有交换并终止——从 O(n²) 降到了 O(n)。2.3 进一步优化记录最后交换位置每轮冒泡后最后发生交换的位置之后的元素其实已经排好了。下一轮只需要遍历到这个位置即可不必遍历到n-i-1。// BubbleSortAdvanced 双优化冒泡排序提前终止 缩减范围funcBubbleSortAdvanced(arr[]int){n:len(arr)lastSwap:n-1// 上一轮最后交换的位置fori:0;in-1;i{swapped:falseborder:lastSwap// 本轮只需遍历到上一轮最后交换处forj:0;jborder;j{ifarr[j]arr[j1]{arr[j],arr[j1]arr[j1],arr[j]swappedtruelastSwapj// 记录本次交换的位置}}if!swapped{break}}}这个优化对部分有序的数组效果显著——比如[2, 1, 3, 4, 5, 6, 7]只需要处理前两个元素后面的大段有序区域完全跳过。三、复杂度分析情况时间复杂度说明最坏情况O(n²)逆序数组每轮都要全量比较和交换最好情况O(n)已排序数组优化版一轮就退出平均情况O(n²)随机数组平均需要约 n²/2 次比较| 空间复杂度 | O(1) | 原地排序只需常数额外空间 |3.1 比较次数推导最坏情况下第 1 轮比较 n-1 次第 2 轮比较 n-2 次…第 n-1 轮比较 1 次总比较次数 (n-1) (n-2) … 1 n(n-1)/2 →O(n²)3.2 交换次数推导最坏情况完全逆序下每次比较都需要交换交换次数 比较次数 n(n-1)/2 →O(n²)四、稳定性分析冒泡排序是稳定排序。稳定性定义如果两个相等的元素在排序前后相对顺序不变则排序是稳定的。冒泡排序只有当arr[j] arr[j1]时才交换严格大于arr[j] arr[j1]时不会交换所以相等元素的相对顺序不会被改变。原始: [3a, 3b, 1] (3a 和 3b 值相同a 在 b 前) 排序后: [1, 3a, 3b] ← 3a 仍在 3b 前面稳定 ✓如果改为arr[j] arr[j1]就交换就会破坏稳定性——这是面试常见陷阱。五、冒泡排序 vs 其他排序对比维度冒泡排序选择排序插入排序最好时间O(n)优化版O(n²)O(n)平均时间O(n²)O(n²)O(n²)最坏时间O(n²)O(n²)O(n²)空间O(1)O(1)O(1)稳定性✅ 稳定❌ 不稳定✅ 稳定交换次数多每次比较都可能交换少每轮只交换1次中等六、适用场景冒泡排序的实际应用场景非常有限因为 O(n²) 的复杂度在大数据下不可接受。但它仍有价值教学用途最直观的排序算法适合入门理解排序的本质小数据量n 50 时 O(n²) 和 O(n log n) 差异不明显近乎有序的数据优化版冒泡对几乎排好的数据非常高效接近 O(n))检测有序性用优化版跑一遍如果一轮就退出则说明数据已有序七、用冒泡思想解决实际问题7.1 找数组中第 k 大的元素不需要完全排序只跑 k 轮冒泡最右端就会出现第 k 大的值// BubbleTopK 找第 k 大的元素只冒泡 k 轮funcBubbleTopK(arr[]int,kint)int{n:len(arr)fori:0;ik;i{forj:0;jn-i-1;j{ifarr[j]arr[j1]{arr[j],arr[j1]arr[j1],arr[j]}}}returnarr[n-k]}funcmain(){arr:[]int{3,1,5,2,4}fmt.Println(第2大:,BubbleTopK(arr,2))// 4}这种做法的时间复杂度是 O(n × k)比完全排序 O(n²) 快——当然更优的做法是用快速选择O(n) 平均但冒泡思路简单直观。八、小结冒泡排序是最容易理解的排序算法但也是效率最低的之一。它的核心价值不在实际应用而在帮助理解排序的基本机制——比较、交换、轮次推进。关键记忆点相邻比较大者右移——这就是冒泡的全部逻辑优化版提前终止可以把最好情况降到 O(n)稳定性来源于严格大于才交换会破坏稳定性实际开发中几乎不用冒泡排序但面试中经常考它的优化和稳定性分析

相关新闻

智能写作辅助系统:课程论文写作的AI解决方案

智能写作辅助系统:课程论文写作的AI解决方案

1. 课程论文写作的困境与破局之道作为一名经历过本科、硕士到博士阶段的学术老兵,我深知课程论文对大学生而言既是必修课又是痛点。每到期末,总能看到图书馆里挤满抓耳挠腮的学生,面对空白文档一坐就是几小时却写不出几行字。这种困境背后隐藏…

2026/7/27 7:53:24阅读更多 →
LangChain Memory机制详解与应用实践

LangChain Memory机制详解与应用实践

1. LangChain中的Memory机制解析在LangChain框架中,Memory(记忆)模块负责维护对话历史和管理上下文信息。这个看似简单的功能实际上影响着整个对话系统的连贯性和智能程度。我最近在多个生产级项目中深入使用了v1.0版本的Memory系统&#xff…

2026/7/27 7:53:24阅读更多 →
麒麟系统部署DeepSeek与AnythingLLM本地知识库实践

麒麟系统部署DeepSeek与AnythingLLM本地知识库实践

1. 麒麟系统与DeepSeek环境准备在国产操作系统领域,麒麟Kylin系统作为国内自主研发的Linux发行版,近年来在政务、金融等关键行业得到广泛应用。本次我们选择的是Kylin-Desktop-V10-SP1版本,该系统基于Ubuntu LTS构建,具有良好的软…

2026/7/27 7:53:24阅读更多 →
C/C++ for循环进阶:从内存池到图像卷积的实战面试技巧

C/C++ for循环进阶:从内存池到图像卷积的实战面试技巧

1. 项目概述:为什么“玩转for循环”是2024年面试的硬通货? 如果你最近在准备C/C的面试,尤其是那些要求手撕代码或者考察项目经验的岗位,可能会发现一个有趣的现象:面试官对“for循环”的考察,早已不是问你“…

2026/7/27 9:30:22阅读更多 →
DM6435外设接口时序与寄存器配置实战指南

DM6435外设接口时序与寄存器配置实战指南

1. 项目概述与核心价值在嵌入式DSP系统开发中,尤其是面对像德州仪器TMS320DM6435这类高性能数字媒体处理器时,最让工程师头疼的往往不是算法实现,而是如何让芯片与外部世界“对话”得稳定可靠。这个“对话”的规则手册,就是各个外…

2026/7/27 9:30:22阅读更多 →
探索高效AI助手:全面掌握Goose桌面应用可视化操作指南

探索高效AI助手:全面掌握Goose桌面应用可视化操作指南

探索高效AI助手:全面掌握Goose桌面应用可视化操作指南 【免费下载链接】goose an open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM 项目地址: https://gitcode.com/GitHub_Trending/goose3…

2026/7/27 9:30:22阅读更多 →
深入解析SM320F28335-HT:高温工业级DSC的架构、外设与电机控制实战

深入解析SM320F28335-HT:高温工业级DSC的架构、外设与电机控制实战

1. 项目概述:为什么选择SM320F28335-HT这颗“工业硬汉”?在电机驱动、数字电源或者高精度伺服控制这类项目里摸爬滚打过的工程师,大概都经历过这样的纠结:用传统的MCU吧,面对复杂的数学运算(比如Clark/Park…

2026/7/27 9:30:22阅读更多 →
SM320F28335-HT DSP外设时序深度解析:从理论到工程实践

SM320F28335-HT DSP外设时序深度解析:从理论到工程实践

1. 项目概述与核心价值在电机驱动、数字电源或者任何需要精密时序控制的嵌入式系统里,选对了高性能的DSP只是第一步,比如德州仪器的SM320F28335-HT。这颗芯片真正的威力,藏在它的数据手册里那些密密麻麻的时序参数表格和波形图里。我见过不少…

2026/7/27 9:30:22阅读更多 →
AI论文写作工具对比:千笔与灵感AI的专科生应用指南

AI论文写作工具对比:千笔与灵感AI的专科生应用指南

1. 论文写作工具现状与需求分析作为一名在学术写作领域摸爬滚打多年的从业者,我深刻理解专科生在论文写作过程中面临的困境。时间紧、任务重、学术基础薄弱是普遍存在的三大难题。传统写作方式下,学生需要花费大量时间在文献检索、框架搭建和内容组织上&…

2026/7/27 9:28:22阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →