Python實現氣泡排序

ii_chengzi發表於2018-11-18

走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換

慢慢“浮”到數列的頂端。氣泡排序對n個專案需要O(n*2)的比較次數,且可以原地排序。儘管這個演算法是最簡單瞭解和實現的排序演算法

之一,但它對於包含大量的元素的數列排序是很沒有效率的。

氣泡排序演算法的運作如下:

由於它的簡潔,氣泡排序通常被用來對於程式設計入門的學生介紹演算法的概念。

以上是百科上介紹的,可是,我有個疑問,僅僅是這個排序演算法簡單嗎?它是否有更深層次的應用呢?翻閱了很多資料,最後在一本

介紹演算法的老外書上,才看到這個演算法的實際價值在哪兒。(because the bubble sort makes passes through the entire unsorted portion of the list,

it has the capability to do something most sorting algorithms cannot。)意思很明顯,該演算法的的最大的價值就是能遍歷連結串列中所有的元素,這樣就能

做很多演算法無法做到的事情。這就是冒泡演算法的最大價值所在吧。

Python兩種實現的原始碼的測試結果:

def bubble_sort(a_list): for pass_num in range(len(a_list) - 1, 0, -1): for i in range(pass_num): if a_list[i] > a_list[i + 1]: temp = a_list[i] a_list[i] = a_list[i + 1] a_list[i + 1] = temp def short_bubble_sort(a_list): exchanges = True pass_num = len(a_list) - 1 while pass_num > 0 and exchanges: exchanges = False for i in range(pass_num): if a_list[i] > a_list[i + 1]: exchanges = True temp = a_list[i] a_list[i] = a_list[i + 1] a_list[i + 1] = temp pass_num = pass_num - 1 a_list = [54,26,93,17,77,31,44,55,20] bubble_sort(a_list) print(a_list)

輸出結果:

[17, 20, 26, 31, 44, 54, 55, 77, 93][20, 30, 40, 50, 60, 70, 80, 90, 100, 110]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543790/viewspace-2220507/,如需轉載,請註明出處,否則將追究法律責任。

相關文章