冒泡排序(Bubble Sort)

冒泡排序(Bubble Sort)是一种简单直观的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

以下是冒泡排序的基本步骤:

  1. 比较相邻元素:从数组的第一个元素开始,对每一对相邻元素进行比较。如果前一个元素大于后一个元素(对于升序排序),则交换这两个元素的位置。

  2. 遍历完整个数组:完成第一轮比较后,最大的元素会被"冒"到数组的末尾。接着对剩余未排序部分(即除了已排好序的最后一个元素外的部分)再次进行上述操作。

  3. 重复以上过程:持续进行上述两步操作,每次都会将当前未排序部分的最大元素"冒"到其所在子序列的末尾。随着遍历次数的增加,未排序部分逐渐减小,直至没有任何元素需要交换,即整个数组已排序。

时间复杂度

  • 最好情况(输入数组已经是有序的):只需进行一次遍历即可确认数组有序,无需进行任何交换,此时时间复杂度为 O(n)。
  • 最坏情况(输入数组逆序排列):需要进行 n-1 轮遍历,每轮都需要进行 n-i 次交换(i 表示当前轮次),因此总的交换次数为 n(n−1)/2,时间复杂度为 O(n2)。
  • 平均情况:时间复杂度也为 O(n2)。

空间复杂度:冒泡排序是原地排序算法,只需要常数级别的额外空间用于临时存储交换的元素,因此空间复杂度为 O(1)。

稳定性:冒泡排序是稳定的排序算法,即相同值的元素在排序前后相对位置不会改变。

虽然冒泡排序在实际应用中由于其较高的时间复杂度(尤其是在处理大规模数据时效率较低)而较少被直接使用,但它作为最基础的排序算法,易于理解、实现简单,常被用于教学和小型数据集的排序。对于规模较小且基本有序的数据,冒泡排序的表现可能优于更复杂的算法。

下面是一个简单的冒泡排序算法实现(以 Python 为例):

复制代码
复制代码
1def bubble_sort(arr):
2    n = len(arr)
3    
4    # 遍历所有数组元素
5    for i in range(n):
6        
7        # 每轮遍历中,设置一个标志位记录是否发生过交换,避免不必要的比较
8        swapped = False
9        
10        # 从数组的第一个元素开始,比较相邻元素并进行交换
11        for j in range(0, n-i-1):
12            
13            if arr[j] > arr[j+1]:
14                arr[j], arr[j+1] = arr[j+1], arr[j]
15                swapped = True
16                
17        # 如果一轮遍历中没有发生过交换,说明数组已经有序,提前结束排序
18        if not swapped:
19            break
20            
21    return arr

在这个改进版的冒泡排序中,引入了swapped标志来检测一轮遍历中是否发生过交换。如果没有发生交换,说明后续的元素已经有序,无需继续进行后续的遍历,从而优化了算法在最好情况下的性能。

相关推荐
NAGNIP3 小时前
万字长文!回归模型最全讲解!
算法·面试
知乎的哥廷根数学学派3 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
且去填词3 小时前
DeepSeek :基于 Schema 推理与自愈机制的智能 ETL
数据仓库·人工智能·python·语言模型·etl·schema·deepseek
人工干智能3 小时前
OpenAI Assistants API 中 client.beta.threads.messages.create方法,兼谈一星*和两星**解包
python·llm
databook4 小时前
当条形图遇上极坐标:径向与圆形条形图的视觉革命
python·数据分析·数据可视化
阿部多瑞 ABU4 小时前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
acanab4 小时前
VScode python插件
ide·vscode·python
666HZ6664 小时前
数据结构2.0 线性表
c语言·数据结构·算法
余瑜鱼鱼鱼5 小时前
Java数据结构:从入门到精通(十二)
数据结构
知乎的哥廷根数学学派5 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习