【算法练习】27:冒泡排序学习笔记

一、冒泡排序的算法思想

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

时间复杂度 :2层循环,所以是

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

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

二、冒泡排序的算法步骤

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

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

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

python 复制代码
def bubbleSort(arr):
    n = len(arr)
    
    # 外层循环控制遍历的轮数
    for i in range(n):
        
        # 设置标志位,记录本轮是否有元素交换,如果没有交换,则提前结束循环
        swapped = False
        
        # 内层循环控制每轮遍历比较和交换的操作
        for j in range(0, n-i-1):
            
            # 比较相邻的两个元素
            if arr[j] > arr[j+1]:
                
                # 交换它们的位置
                arr[j], arr[j+1] = arr[j+1], arr[j]
                
                # 设置标志位为True,表示发生了交换
                swapped = True
                
        # 如果本轮没有发生交换,则数组已经有序,可以直接退出循环
        if not swapped:
            break
            
    return arr
相关推荐
HPtiger7 小时前
数据结构——选择排序
数据结构·算法·排序算法
康实训7 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
DongQiShanRen7 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CCblandy7 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
丑梨数据8 小时前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
优选资源分享8 小时前
PicGo v3.0.3 新版 | 开源免费图床工具
javascript·笔记·electron
erzong2319 小时前
Linux操作系统:线程概念与控制
linux·算法
星恒随风10 小时前
Linux线程概念详解:从分页存储、页表、MMU与TLB,深入理解线程和进程的区别与联系
linux·运维·笔记·学习·状态模式
qq_2842740510 小时前
数控机床编程基础与坐标系:编程六步流程、程序号/程序段/程序字格式,与右手定则下车床铣床XYZ轴判定(含考点)
笔记·学习·自动化·制造
德林恩宝10 小时前
On-Policy Distillation(OPD)学习文档
人工智能·学习·机器学习·大模型·llm·大模型微调