码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【算法练习】27:冒泡排序学习笔记


    一、冒泡排序的算法思想

            原理:以升序为例,冒泡排序通过从左往右连续比较相邻元素,当发现左边比右边大就交换元素。从左往右依次比较完称为“一轮”,每轮结束之后就会固定一个元素。

            时间复杂度:2层循环,所以是O(n^2)

            空间复杂度:因为没有利用额外的空间,所以是O(1)

            稳定性:因为相邻元素比较,如果相同大小则不交换位置,所以是稳定的。

    二、冒泡排序的算法步骤

    1. 初始化:给定一个需要排序的数组
    2. 遍历数组:从数组的第一个元素开始,依次遍历到最后一个元素,对每一个相邻的元素进行比较
    3. 比较相邻元素:比较相邻两个元素的大小,如果前面比后面大,则交换两者的位置
    4. 内层循环:对整个数组进行多轮遍历,每轮遍历结束后,最大的元素将会冒泡到数组的末尾
    5. 重复:重复2到4,但每次减少一个元素的比较,因为不比较的这个元素已经是最大的了,所以只需要遍历到上次已经排序好的部分之前。
    6. 终止条件:当不在发生交换时数组已经完全有序,此时停止排序

            本文是自己的算法学习笔记,所以就不放动图演示了,网上很多都比较画的好,这里超级推荐一个开源算法项目,链接我放在这里了!非常感谢开源大佬:《Hello 算法》冒泡排序

    三、基于Python的冒泡排序实现

    1. def bubbleSort(arr):
    2. n = len(arr)
    3. # 外层循环控制遍历的轮数
    4. for i in range(n):
    5. # 设置标志位,记录本轮是否有元素交换,如果没有交换,则提前结束循环
    6. swapped = False
    7. # 内层循环控制每轮遍历比较和交换的操作
    8. for j in range(0, n-i-1):
    9. # 比较相邻的两个元素
    10. if arr[j] > arr[j+1]:
    11. # 交换它们的位置
    12. arr[j], arr[j+1] = arr[j+1], arr[j]
    13. # 设置标志位为True,表示发生了交换
    14. swapped = True
    15. # 如果本轮没有发生交换,则数组已经有序,可以直接退出循环
    16. if not swapped:
    17. break
    18. return arr

  • 相关阅读:
    从单体架构迁移到 CQRS 后,我觉得 DDD 并不可怕
    [计算机毕业设计]关联挖掘的服装推荐系统
    智能技术上的“是”并不代表具体领域的“应该”
    超详细!DALL · E 文生图模型实践指南
    【0基础前端】CSS-C3总结详细笔记包含代码块从入门到高阶通俗易懂
    【云原生】Kubernetes核心技术(中)
    Java基础知识(知识点)
    【Unity】常用几何知识:根据角度获取圆形上某个点的坐标
    数据库注入提权总结(二)
    python毕业设计作品基于django框架 教室图书馆座位预约系统毕设成品(8)毕业设计论文模板
  • 原文地址:https://blog.csdn.net/qq_39780701/article/details/137377535
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号