原理:以升序为例,冒泡排序通过从左往右连续比较相邻元素,当发现左边比右边大就交换元素。从左往右依次比较完称为“一轮”,每轮结束之后就会固定一个元素。
时间复杂度:2层循环,所以是
空间复杂度:因为没有利用额外的空间,所以是
稳定性:因为相邻元素比较,如果相同大小则不交换位置,所以是稳定的。
本文是自己的算法学习笔记,所以就不放动图演示了,网上很多都比较画的好,这里超级推荐一个开源算法项目,链接我放在这里了!非常感谢开源大佬:《Hello 算法》冒泡排序
- 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