根据图示已经找到了一规律
有一个数值是递增的,有一个数值是递减的。需要迭代遍历实现递增和递减
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)