今天說乙個比較簡單易懂的演算法,相信大家在大學裡面肯定都有接觸過。在這裡介紹排序演算法的一種氣泡排序,對於初學python的新人來說因該很容易理解。排序顧名思義,對給定的一串字元(其實也不一定是字元,可以是其他可比較的元素)按照從大到小或者從小到大的順序排列。
演算法原理:
1.從第一位開始比較相鄰的兩個元素。如果前者比後者大(由小到大排序),那麼我們就交換它們。
2.針對每乙個兩兩相鄰的元素都做比較操作。直到把所有元素比較完。這個時候最後乙個元素是最大值。
3.此時我們在從頭比較,重複第二步的操作,直到比較出倒數第二大的元素。
4.以此類推知道所有的元素全部比較完成,這樣從小到大序列即排序完成。
下面貼上**示例,既然上面解釋是從小到大那我們**來個從大到小把:)
這裡我們直接用random模組來隨機獲取值。
import random
defbubblesort
(target):
length = len(target)
while length > 0:
length -= 1
cur = 0
while cur < length: #拿到當前元素
if target[cur] < target[cur + 1]:
target[cur], target[cur + 1] = target[cur + 1], target[cur]
cur += 1
return target
if __name__ == '__main__':
a = [random.randint(1,1000) for i in range(100)]
print bubblesort(a)
這裡外層迴圈用來控制這個序列長度和比較次數。第二層迴圈用來交換。
按照慣例,來分析一下時間複雜度。我們先來定義比較次數記為c,元素的移動次數記為m。若我們隨機到正好一一串從小到達排序的數列,那我們比較的一趟比較就能完事,那比較次數只與你定義的數列長度有關,則c=n-1,因為正好是從小到達排列的所以不需要在移動了,所以m=0。所以這個時候氣泡排序為最為理想的時間複雜度o(n)。
那麼我們現在再來考慮乙個極端的情況,整個序列都是反序的。則完成排序需要n-1次排序,每次排序需要n-i次比較(1<=i<=n-i),在演算法上比較之後移動資料需要三次操作。在這種情況下,比較和移動的數均達到了最大值。
cmax=n(n-1)/2=o(n^2)
mmax=3n(n-1)/2=o(n^2)
所以,冒泡演算法總的平均時間複雜度為o(n^2)
氣泡排序(python實現)
coding utf 8 created on tue jul 4 11 37 19 2017 data list cnt num all 0 def data in func data list,cnt num all while true judge continue input 請選擇是輸入資...
氣泡排序(Python實現)
氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,一次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。這個演算法的名字由來是因為...
Python實現氣泡排序
氣泡排序 bubble sort 是最容易理解的排序演算法之一,但是執行效率有點低。冒泡過程 對待排序部分 假設有m個元素 從頭開始進行兩兩比較,如果第乙個比第二個大 公升序 就交換他們兩個。這樣本輪排序結束後就可以保證值最大的元素在最右邊,那麼下次只需要對前面 m 1 個數進行冒泡。完整的氣泡排序...