Python 冒泡排序的優化

工作不重,看下算法書:小灰的算法之旅,挺不錯的,有基礎的可以看看,小瑕疵就是代碼是用c++ 寫的,有時候看起來怪怪。

優化一、

在提前N次就排好順序後,在N+1輪排序結束後跳出大循環,結束排序

尷尬:有可能跳出循環的那一輪,與正常結束循環數一樣

 1 def sort(array):
 2     for i in range(len(array)-1):
 3         isNotchange=True
 4         for j in range(len(array)-i-1):
 5             print(array[j], j)
 6             if array[j] > array[j+1]:
 7                 array[j],array[j+1] = array[j+1],array[j]
 8                 isNotchange=False
 9         if isNotchange==True:
10             break

優化二、

在第N次排順完成後,後半段數字已完成排序,則從N+1輪排序開始,後半段數字不用參與排序

 1 def maoPao(array):
 2     unorderedBorder = len(array) - 1
 3     lastExchangeNumberIndex=0
 4     for i in range(len(array)-1):
 5         isExchangeNumber = True
 6         for j in range( unorderedBorder):
 7             if array[j] > array[j+1]:
 8                 print(array[j],j)
 9                 array[j],array[j+1] = array[j+1],array[j]
10                 lastExchangeNuberIndex=j
11                 isChangeNumber=False
12         print("第 {0} 輪輸出結果 : {1}".format(i + 1, array))
13         unorderedBorder=lastExchangeNumberIndex
14         if isExchangeNumber==True:
15             break

優化三、

例子:b=[2,3,4,4,5,7,8,1]

 1 def cocktailSort(array):
 2     for i in range(int(len(array)/2)):
 3         isNotchange = True
 4         if i % 2 == 0 :
 5             for j in range(len(array) - i - 1):
 6                 if array[j] > array[j + 1]:
 7                     array[j], array[j + 1] = array[j + 1], array[j]
 8                 isNotchange = False
 9             print("左到右,第 {0} 輪輸出結果 : {1}".format(i + 1, array))
10             print(" ")
11             if isNotchange == True:
12                 break
13         else:
14             print("右到左,第 i 輪循環: ", i)
15             for j in range(len(array)-1,-1+i,-1):
16                 if array[j] < array[j-1]:
17                     print("j de zhi", j)
18                     array[j], array[j - 1] = array[j - 1], array[j]
19                     isNotchange = False
20             print("右到左,第 {0} 輪輸出結果 : {1}".format(i + 1, array))
21             print(" ")
22             if isNotchange == True:
23                 break

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章