一、算法思想
1. 第1趟:比较第0个元素和第1个元素。。。比较第n-2个元素和第n-1个元素,将最大(小)的元素放在第n-1个元素位置
2. 第2趟:比较第0个元素和第1个元素。。。比较第n-3个元素和第n-2个元素,将最大(小)的元素放在第n-2个元素位置
3. ......
4. 第n-1趟:比较第0个元素和第1个元素,将最小(大)的元素放在第1个元素的位置
5. 每次循环i[0,n-2]
6. 每次判断相邻位置元素(相邻元素范围[0,n-i-1])的大小,如果前者大于后者,就交换顺序,最终将此次循环的最大元素放在n-i-1的位置上
二、算法分析
平均时间复杂度:O(n^2)
空间复杂度:O(1) (用于记录是否发生交换——flag)
稳定性:稳定
三、代码
import random
def bubbleSort(lst, reverse = False):
length = len(lst)
for i in range(0, length): # 本质只是循环到 n-2 ,这么写是简化写法
flag = False
for j in range(0, length-i-1):
# 比较相邻两个元素,并根据需要交换
exp = 'lst[j] > lst[j+1]'
if reverse:
exp = 'lst[j] < lst[j+1]'
if eval(exp):
lst[j], lst[j+1] = lst[j+1], lst[j]
flag = True
# 如果扫描一次结束,没有发生元素交换,则说明该lst已经满足要求
if not flag:
break
if __name__ == "__main__" :
lst = [random.randint(0,10) for i in range(10)]
print('初始序列:',lst)
# 测试冒泡算法
bubbleSort(lst)
print('排序后:',lst)
四、运行结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/da7e47da28b70b42773251344237b132.png)