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
当你的才华撑不起你的野心时,你需要静下心来学习。
原文地址:https://www.cnblogs.com/z977690557/p/15530293.html