python排序算法之一:冒泡排序(及其优化)

2019-12-05  本文已影响0人  栈先生

普通版:

def bubble_sort(nums):
    for i in range(len(nums) - 1):  
        for j in range(len(nums) - i - 1):    
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
    return nums

动态展示一下冒泡排序过程:


image.png

假设现在有一个数组[6,1,2,3,4,5],当我们进行完第一次冒泡排序过程后变为[1,2,3,4,5,6],这时候数组已经变成有序的了,程序要是再继续循环岂不是一直在做无用功,那怎么知道数组已经是有序的了呢?计算机又不跟你我一样能眼观大局,它看不到怎么办呢,于是它就再试一次呗,接下来再进行一次冒泡排序,1和2, 2和3, 3和4, 4和5, 5和6(好累,幸亏就tm六个数)依次冒泡。

优化版:(添加一个判断位)

def bubble_sort(nums):

    for i in range(len(nums) - 1):  
        ex_flag = False  # 改进后的冒泡,设置一个交换标志位
        for j in range(len(nums) - i - 1):  
            
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
                ex_flag = True
        if not ex_flag:
            return nums  # 这里代表计算机偷懒成功 (〃'▽'〃)

    return nums  # 这里代表计算机没有偷懒成功 o(╥﹏╥)o
上一篇下一篇

猜你喜欢

热点阅读