把相邻的元素作比较,较大的元素慢慢浮现到最后
第一版:
_list = [0,9,8,7,6,5,4,3,2,1]
for i in range(len(_list)):
for j in range(i+1, len(_list)):
if _list[i] >= _list[j]:
_list[i],_list[j] = _list[j],_list[i]
可惜不是正规的冒泡排序
标准版:
def bubble_sort(_list):
for i in range(len(_list)):
swaped = False
for j in range(len(_list) - i - 1):
if _list[j] > _list[j + 1]:
_list[j], _list[j + 1] = _list[j + 1], _list[j]
swaped = True
# 如果swaped为False说明第一趟不需要交换,就直接break
if not swaped:
break
return lst
加个变量确保最好时间度为O(n)
鸡尾酒版:
## 鸡尾酒排序 从左边循环到右边,然后又从右边循环到左边第一个元素,又从第一个循环到右边-2个元素,再从右往左循环到第2个元素
def bubble_sort(lst):
right = len(lst)
left = 0
while left <= right:
right -= 1
for i in range(left, right):
if lst[i] > lst[i+1]:
lst[i], lst[i + 1] = lst[i + 1], lst[i]
left += 1
for j in range(right-1, left-1, -1):
if lst[j] < lst[j - 1]:
lst[j], lst[j - 1] = lst[j - 1], lst[j]
return lst