python中的冒泡排序

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)

  

 

上一篇:JQuery 知识点总结


下一篇:css结构伪类