冒泡排序

冒泡排序属于交换排序
相邻元素两两比较大小,如果前面比后面大,就交换位置,最后一个元素将是最大的数
时间复杂度为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

posted @ 2018-08-22 13:34  KeithTt  阅读(177)  评论(0编辑  收藏  举报