冒泡排序属于交换排序
相邻元素两两比较大小,如果前面比后面大,就交换位置,最后一个元素将是最大的数
时间复杂度为O(n²)
优化点:
- 冒泡法需要一轮一轮进行比较,如果某一趟中,一次都没有交换,那就说明序列已经排好序了,就可以停止循环了
l = [1, 9, 8, 5, 6, 7, 4, 3, 2]
# 一共处理len(l)-1趟
for i in range(len(l) - 1):
# 定义一个开关,默认进来没有交换过,设为False
flag = False
# 逐个两两比较,每处理一趟固定一个数,比较次数为len(l)-1-i次
for j in range(len(l)-1 - i):
# 如果前面比后面大,则互换位置
if l[j] > l[j+1]:
l[j], l[j+1] = l[j+1], l[j]
# 如果交换过,则设置开关为True
flag = True
# 如果没有交换过,就停止循环
if not flag:
break
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
参考:
https://zh.wikipedia.org/wiki/冒泡排序
https://en.wikipedia.org/wiki/Bubble_sort