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