氣泡排序的三種實現方法-----python
阿新 • • 發佈:2019-02-02
def bubble(l):
print l
for index in range(len(l) - 1, 0 , -1):
for two_index in range(index):
if l[two_index] > l[two_index + 1]:
l[two_index], l[two_index + 1] = l[two_index + 1], l[two_index]
print l
l = [10, 20, 40, 50, 30, 60]
bubble(l)
方法1:就是依次遍歷,把最小的數字沉到陣列的最後
def bubble_improve(l): print l flag = 1 for index in range(len(l) - 1, 0 , -1): if flag: flag = 0 for two_index in range(index): if l[two_index] > l[two_index + 1]: l[two_index], l[two_index + 1] = l[two_index + 1], l[two_index] flag = 1 else: break print l l = [10, 20, 40, 50, 30, 60] bubble_improve(l)
方法2:就是加一個標誌用來判斷一次遍歷的時候,還是否有交換,如果沒有交換就說明已經排列好了,則退出;否則繼續進行遍歷。
文法2的變異,在一次移動之後和它之前的座標相比較,如果符合條件就進行一次移動。def bubble_improve2(l): print l flag = 1 for index in range(len(l) - 1, 0 , -1): if flag: flag = 0 for two_index in range(index): flag_in = 0 if l[two_index] > l[two_index + 1]: l[two_index], l[two_index + 1] = l[two_index + 1], l[two_index] flag = 1 flag_in = 1 if flag_in: if two_index - 1 > 0: if l[two_index - 1] > l[two_index]: l[two_index - 1], l[two_index] = l[two_index], l[two_index - 1] else: break print l l = [10, 20, 40, 50, 30, 60] bubble_improve2(l)
def bubble_improve1(l):
print l
flag = len(l) - 1
while(flag > 0):
k = flag
flag = 0
for j in range(k):
if l[j] > l[j + 1]:
l[j], l[j + 1] = l[j + 1], l[j]
flag = j
print l
l = [10, 20, 40, 50, 30, 60]
bubble_improve1(l)
方法3:也是 記錄一個標誌,這個標誌是進行一次遍歷的時候,最後交換的座標,這樣可以確定最後進行交換的位置,後面的就不需要再進行遍歷了。
def bubble_improve(l):
flag = 1
bottom = 0
top = len(l) - 1
while flag:
flag = 0
for index in range(bottom, top, 1):
if l[index] > l[index + 1]:
l[index], l[index + 1] = l[index + 1], l[index]
flag = 1
top = top - 1
for index in range(top, bottom, -1):
if l[index] < l[index - 1]:
l[index - 1], l[index] = l[index], l[index - 1]
flag = 1
bottom = bottom + 1
print l
l = [10, 20, 40, 50, 30, 60]
bubble_improve(l)
方法四(雞尾酒排序):思路和方法二的差別是來從頭到尾和從尾到頭的來回遍歷。