給出一個列表,進行冒泡排序算法
原理算法: spa
1 li = [52, 37, 23, 11, 3, 1, ] 2 3 print(li) 4 5 # 每次循環,進行一次排序,列表內數字兩兩比較,最大的數字排到最末尾 6 # 一共循環len(li) - 1 次 7 8 for i in range(len(li) - 1): 9 if li[i] > li[i + 1]: 10 temp = li[i] 11 li[i] = li[i+1] 12 li[i + 1] = temp 13 print(li) 14 15 for i in range(len(li) - 2): 16 if li[i] > li[i + 1]: 17 temp = li[i] 18 li[i] = li[i+1] 19 li[i + 1] = temp 20 print(li) 21 22 for i in range(len(li) - 3): 23 if li[i] > li[i + 1]: 24 temp = li[i] 25 li[i] = li[i+1] 26 li[i + 1] = temp 27 print(li) 28 29 for i in range(len(li) - 4): 30 if li[i] > li[i + 1]: 31 temp = li[i] 32 li[i] = li[i+1] 33 li[i + 1] = temp 34 print(li) 35 36 for i in range(len(li) - 5): 37 if li[i] > li[i + 1]: 38 temp = li[i] 39 li[i] = li[i+1] 40 li[i + 1] = temp 41 print(li) 42 43 ''' 44 輸出的結果: 45 [52, 37, 23, 11, 3, 1] 46 [37, 23, 11, 3, 1, 52] 47 [23, 11, 3, 1, 37, 52] 48 [11, 3, 1, 23, 37, 52] 49 [3, 1, 11, 23, 37, 52] 50 [1, 3, 11, 23, 37, 52] 51 '''
能夠看到以上排序每次步驟一致,只有一個變量(即不用對比最後一個元素)code
所以,能夠再設置一個變量j, 做爲循環時候的變量簡化操做,由此獲得:blog
1 li = [52, 37, 23, 11, 3, 1, ] 2 print(li) 3 4 for j in range(1, len(li)): 5 for i in range(len(li) - j): 6 if li[i] > li[i + 1]: 7 temp = li[i] 8 li[i] = li[i+1] 9 li[i + 1] = temp 10 print(li) 11 ''' 12 結果: 13 [52, 37, 23, 11, 3, 1] 14 [37, 23, 11, 3, 1, 52] 15 [23, 11, 3, 1, 37, 52] 16 [11, 3, 1, 23, 37, 52] 17 [3, 1, 11, 23, 37, 52] 18 [1, 3, 11, 23, 37, 52] 19 '''