Press "Enter" to skip to content

Go 数据结构和算法篇(四):冒泡排序

今天学院君要给大家介绍的是基于选择的排序算法,常见基于选择的排序算法有冒泡排序、插入排序、选择排序、归并排序和快速排序,我们在选择排序算法的时候,通常会根据以下几个维度来考虑:

  1. 时间复杂度
  2. 空间复杂度(对内存空间的消耗)
  3. 算法的稳定性(如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变)

我们首先从冒泡排序开始。

实现原理

冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。

光看定义有点抽象,我们用图来演示,假设待排序数字是 4、5、6、3、2、1,第一次排序的流程是这样的:

冒泡排序

看这个图的时候要结合定义一起看,否则也比较懵逼,当然如果你去 VisuAlgo 上看动态图的话就更形象了: https://visualgo.net/zh/sorting,经过 n 次冒泡,最终完成排序(所谓冒泡,以升序来看,就是每次把待排序序列中的最大值插到已排序序列的最前面,这个过程就像冒泡一样):

冒泡排序图示

示例代码

重要的是理解冒泡排序的原理,懂了原理就是把这个排序过程翻译成代码而已,以下是 Go 代码实现的冒泡排序:

package main

import "fmt"

func bubbleSort(nums []int) []int {
    if len(nums) <= 1 {
        return nums
    }

    // 冒泡排序核心实现代码
    for i := 0; i < len(nums); i++ {
        flag := false
        for j := 0; j < len(nums) - i - 1; j++ {
            if nums[j] > nums[j+1] {
                nums[j], nums[j+1] = nums[j+1], nums[j]
                flag = true
            }
        }
        if !flag {
            break
        }
    }

    return nums
}

func main() {
    nums := []int{4, 5, 6, 7, 8, 3, 2, 1}
    nums = bubbleSort(nums)
    fmt.Println(nums)
}

这里我们使用切片类型来存储待排序数据序列,并且可以看到,我们对冒泡排序有个小小的优化,就是当某一次遍历的时候发现没有需要交换的元素,则认为整个序列已经排序完成。

性能分析

最后我们来看下冒泡排序的性能和稳定性:

  1. 时间复杂度: O(n2)
  2. 空间复杂度:只涉及相邻元素的交换,是原地排序算法
  3. 算法稳定性:元素相等不会交换,是稳定的排序算法

时间复杂度是 O(n2),看起来性能并不是很好,所以我们在实践中基本不会选用冒泡算法。

发表回复 取消回复

Sidebar

极客推荐

最新发布

  • Perplexity 如何构建 AI 产品开发新模式
  • AI Index —— 通过13张图解读AI现状
  • Headlime&HeadshotPro 创始人 —— 以100万美元出售 AI 写作项目并创建月入30万美元的 AI 照片服务
  • AI 德语导师创始人的独立创业之旅 —— 从0.01欧元到10000欧元月收入
  • Bannerbear&Browserbear 创始人 —— 月入5万美元的成功秘诀与艰辛之路
  • SiteGPT 创始人的励志故事 —— 凭借 AI 东风从副业项目到月入10万美元
  • ShipFast 创始人 —— 我的独立开发者故事:2年内从被解雇到月入6.5万美元
  • 一人企业的标杆 —— PhotoAI 创始人年入数百万美元的独立开发者故事
  • Typing Mind 创始人 —— 我的独立开发者故事:2年内从0到每月4.5万美元
  • 极客智坊支持 Gemini/Claude3 模型及UI交互调整

热门阅读

  • Go 入门到精通教程 - 68,428 views
  • ChatGPT 终极指南 - 35,376 views
  • Go 快速入门篇(一):第一个 Go 程序 - 17,885 views
  • Go 快速入门篇(二):Go 项目工程管理示例(基于 Go Modules) - 16,974 views
  • 开篇:为什么学习 Go 语言 - 14,711 views
  • 基于 OpenAI API + Laravel 快速构建网页版 ChatGPT - 14,119 views
  • Go 数据类型篇(一):变量、作用域、常量和枚举 - 13,283 views
  • Go 快速入门篇(三):单元测试、问题定位及代码调试 - 12,925 views
  • 面向 ChatGPT 编程实现全栈开发的 18 种方法 - 12,166 views
  • Go 面向对象编程篇(二):类的定义、初始化和成员方法 - 10,966 views

热门推荐

  • Go 面向对象编程篇(三):通过组合实现类的继承和方法重写 22 votes, average: 5.00 out of 522 votes, average: 5.00 out of 522 votes, average: 5.00 out of 522 votes, average: 5.00 out of 522 votes, average: 5.00 out of 5 (5.00)
  • Go 快速入门篇(三):单元测试、问题定位及代码调试 19 votes, average: 5.00 out of 519 votes, average: 5.00 out of 519 votes, average: 5.00 out of 519 votes, average: 5.00 out of 519 votes, average: 5.00 out of 5 (5.00)
  • Go 错误处理篇(三):panic 和 recover 17 votes, average: 5.00 out of 517 votes, average: 5.00 out of 517 votes, average: 5.00 out of 517 votes, average: 5.00 out of 517 votes, average: 5.00 out of 5 (5.00)
  • Go 数据结构和算法篇(二):栈 9 votes, average: 5.00 out of 59 votes, average: 5.00 out of 59 votes, average: 5.00 out of 59 votes, average: 5.00 out of 59 votes, average: 5.00 out of 5 (5.00)
  • 基于 OpenAI API + Laravel 快速构建网页版 ChatGPT 9 votes, average: 5.00 out of 59 votes, average: 5.00 out of 59 votes, average: 5.00 out of 59 votes, average: 5.00 out of 59 votes, average: 5.00 out of 5 (5.00)
  • Go 并发编程篇(一):从多进程、多线程到协程 8 votes, average: 5.00 out of 58 votes, average: 5.00 out of 58 votes, average: 5.00 out of 58 votes, average: 5.00 out of 58 votes, average: 5.00 out of 5 (5.00)
  • Go 数据结构和算法篇(十八):平衡二叉树 7 votes, average: 5.00 out of 57 votes, average: 5.00 out of 57 votes, average: 5.00 out of 57 votes, average: 5.00 out of 57 votes, average: 5.00 out of 5 (5.00)
  • Go 数据结构和算法篇(六):选择排序 6 votes, average: 5.00 out of 56 votes, average: 5.00 out of 56 votes, average: 5.00 out of 56 votes, average: 5.00 out of 56 votes, average: 5.00 out of 5 (5.00)
  • Go 并发编程篇(二):协程实现原理及使用入门 5 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 5 (5.00)
  • Go 数据结构和算法篇(十七):二叉排序(查找)树 5 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 55 votes, average: 5.00 out of 5 (5.00)

最新评论

  • Headlime&HeadshotPro 创始人 —— 以100万美元出售 AI 写作项目并创建月入30万美元的 AI 照片服务 - 极客书房发表在《 一人企业的标杆 —— PhotoAI 创始人年入数百万美元的独立开发者故事》
  • AI 德语导师创始人的独立创业之旅 —— 从0.01欧元到10000欧元月收入 - 极客书房发表在《 一人企业的标杆 —— PhotoAI 创始人年入数百万美元的独立开发者故事》
  • Bannerbear&Browserbear 创始人 —— 月入5万美元的成功秘诀与艰辛之路 - 极客书房发表在《 一人企业的标杆 —— PhotoAI 创始人年入数百万美元的独立开发者故事》
  • 极客智坊引入 GPT-4V 支持图片对话 - 极客书房发表在《 极客智坊支持 Gemini/Claude3 模型及UI交互调整》
  • 如何成为优秀的软件工程师 - 极客书房发表在《 如何提高10倍工作效率》
  • 如何成为优秀的软件工程师 - 极客书房发表在《 在软件工程中高质量工作》
  • jinhuajun发表在《 Go 并发编程篇(四):基于锁和原子操作实现并发安全》
  • gzx发表在《 Go 并发编程篇(四):基于锁和原子操作实现并发安全》
  • bella发表在《 Go 并发编程篇(三):基于共享内存实现协程通信》
  • bella发表在《 Go 并发编程篇(四):基于锁和原子操作实现并发安全》

热门标签

AI ChatGPT GeekAI Go GPT-4 Prompt SaaS SEO 一人企业 二叉树 人工智能 入门课程 函数 函数式编程 初始化 加密货币 在线收入 字符串 实现代码 工具 广告文案 微软 手册 排序算法 接口 效率 教程 数字产品 数据类型 数据结构 数组 无代码 机器学习 极客智坊 查找算法 电子商务 算法 算法复杂度 粉丝运营 股票投资 软件工程 遍历 链表 销售漏斗 面向对象编程

深圳SEO优化公司木棉湾seo网站推广多少钱无锡网页制作多少钱金华品牌网站设计哪家好张家口外贸网站建设龙华阿里店铺托管报价张掖网站优化按天收费价格南平优秀网站设计公司石岩高端网站设计公司白山网站推广工具报价烟台阿里店铺运营报价银川百姓网标王推广报价揭阳SEO按天扣费哪家好福永网站开发公司鹤壁百度网站优化推荐邢台建站报价衢州网站设计价格镇江企业网站改版推荐大连网站seo优化公司罗湖网站推广方案价格恩施网站搭建推荐镇江优化公司丹东网站设计模板公司和县百姓网标王推广推荐龙岗网站开发多少钱福州百度标王价格成都如何制作网站丽水外贸网站设计哪家好海东网页设计推荐菏泽关键词按天收费推荐百色如何制作网站报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化