python中的冒泡排序

根据图示已经找到了一规律
有一个数值是递增的,有一个数值是递减的。需要迭代遍历实现递增和递减
li = [55, 22, 11, 33, 44] # 这个列表的大小也对应着准备好的图
# 递增的数值正好是列表长度的length减一 (len(a) - 1)
for i in range(len(li) - 1):
# 递减的数可以让length减一再减i(i是从0开始的)
for j in range(len(li) - 1 - i):
# 前后比较,如果大于符号成立,那就进行交换。否则就什么也不做
if li[j] > li[j + 1]:
# 交换变量
li[j], li[j + 1] = li[j + 1], li[j]
print(li)
# 冒泡排序已经实现了
其实图示中可以发现一个问题,第二次就已经排好了。第三次和第四次空比较,没有意义
可以优化一下代码
li = [55, 22, 11, 33, 44]
count = 0
for i in range(len(li) - 1):
count += 1
# 在每次比较之前,设置一个变量
flag = True
for j in range(len(li) - 1 - i):
if li[j] > li[j + 1]:
li[j], li[j + 1] = li[j + 1], li[j]
# 如果发生了交换,那就把变量设置成False
flag = False
# 在外层循环(每一个新的元素开始比较之前)判断,变量flag是否变更。
# 如果变更成Flase就意味着发生了交换。
# 如果没有发生交换,就意味着已经排好了,跳出循环
if flag:
break
print(li)
print(count)

浙公网安备 33010602011771号