工作不重,看下算法书:小灰的算法之旅,挺不错的,有基础的可以看看,小瑕疵就是代码是用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