冒泡排序(英語:Bubble Sort)是一種簡單的排序算法。它重複地遍歷要排序的數列,一次比較兩個元素,若是他們的順序錯誤就把他們交換過來。遍歷數列的工做是重複地進行直到沒有再須要交換,也就是說該數列已經排序完成。這個算法的名字由來是由於越小的元素會經由交換慢慢「浮」到數列的頂端。算法
冒泡排序算法的運做以下:數組
添加 flag 參數優化
記錄上次交換的位置spa
雞尾酒排序code
def sort(a):
for i in range(len(a)-1, 0, -1):
for j in range(i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
# 優化1: 添加標記flag, 若是內循環中的判斷沒有執行,表示已經數組是排序好的,直接退出循環便可
def sort_better1(a):
for i in range(len(a)-1, 0, -1):
print("i------" + str(i))
flag = True #若是下面的循環中的判斷沒有執行,表示已經數組是排序好的,直接退出循環便可
for j in range(i):
print("j------" + str(j))
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
flag = False
print(a)
if flag:
break
# 優化2:記錄上次最後一次交換元素的位置,那麼次位置以後的就是已經排序好的,下次遍歷的時候就不須要再遍歷此位置以後的元素
def sort_better2(a):
last_position = len(a) - 1
for i in range(len(a)-1, 0, -1):
print("i------" + str(i))
flag = True
index = 0
for j in range(last_position):
print("j------" + str(j))
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
flag = False
index = j
print(a)
if flag:
break
last_position = index
# 優化3: 雞尾酒排序 雞尾酒排序,即雙向的冒泡排序,等因而冒泡排序的輕微變形。不一樣的地方在於從低到高而後從高到低
#(有前後順序,並不是同時;大循環下第一個循環是從開始掃到結束,將最大的歸到最後;第二個循環是從倒數第二個位置往開始端掃,將最小的歸到開始的位置)
def sort_better3(a):
last_position = len(a) - 1
for i in range(len(a)-1, 0, -1):
print("i------" + str(i))
flag = True
index = 0
for j in range(last_position):
print("j------" + str(j))
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
flag = False
index = j
last_position = index
for k in range(last_position, 0, -1):
print("k------" + str(k))
if a[k] < a[k-1]:
a[k], a[k-1] = a[k-1], a[k]
flag = False
print(a)
if flag:
break
li = [2, 7, 3, 1, 5, 4, 8, 9, 10]
sort(li)
print(li)
a = [2, 7, 3, 1, 5, 4, 8, 9, 10]
#sort_better1(a)
#print(a)
b = [2, 7, 3, 1, 5, 4, 8, 9, 10]
sort_better2(b)
print(b)
c = [2, 7, 3, 1, 5, 4, 8, 9, 10]
#sort_better3(c)
#print(c)複製代碼