python與冒泡排序,python冒泡排序

來源:互聯網
上載者:User

python與冒泡排序,python冒泡排序

上一篇文章,介紹了一個非常快的排序演算法--桶排序,但是它的缺點就是太耗資源了,這次要實現的演算法就不用太耗資源了,它就是冒泡排序。

問題提出:

將以下資料升序排列:9, 2, 8, 6, 4

 

冒泡排序原理:

冒泡排序就是遍曆資料,每次只與下一個數字比較,如果這兩個數順序不對,則與交換過來。

就上面那個問題來說,因為要升序排列,所以數字越大越排在後面。則兩個數比較的時候,如果後一個數比當前數小,則順序不對,要將這兩個數交換。遍曆的過程如:

第一次比較第一和第二個數字,9與2相比較,9比2大,順序不對,則交換位置。

第二次比較第二與第三個數字,因為9換到了第二位,則9與8比較,9大,順序不對,則交換位置。

以此類推,最後9就像泡泡一樣升到了最後一位,我們稱這樣為一趟,這一趟裡面有多次比較。

 

由於一趟只歸為一個數,則如果有n個數字,則需要進行n-1趟。

因為歸位後的數字不用再比較了,所以每趟只需要比較n-1-i次(i為已執行的趟數)。

由上可以得出冒泡排序的關鍵步驟是兩個迴圈:

1 for(i = 0; i < n-1; i++){2   for(j = 0; j < n-1-i; j++)3     if(a[j] > a[j+1]){4       temp = a[j];5       a[j] = a[j+1];6       a[j+1] = temp;7     }8 } 

python實現:

根據上述思路,用python實現也是把關鍵地方實現即可:

1 #假設變數已經全部定義好2 for i in range(len-1):3   for j in range(len-1-i):4     if a[j] > a[j+1]:5       a[j], a[j+1] = a[j+1], a[j]

以下是完整代碼:(可以到github上下載https://github.com/DIGCreat/pythonAndAlgorithms.git)

 1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 ''' 4 簡介:本程式主要是用python實現冒泡排序,程式的功能是實現 5      降序排列。 6  7 作者:King  日期:2016/08/01  版本1 8 ''' 9 10 class BubbleSort(object):11     '''12     self.datas:       要排序的資料列表13     self.datas_len:   資料急的長度14     _sort():          排序函數15     show():           輸出結果函數16 17     用法:18     BubbleSort(datas) 執行個體化一個排序對象19     BubbleSort(datas)._sort() 開始排序,由於排序直接操作20                               self.datas, 所以排序結果也21                               儲存在self.datas中22     BubbleSort(datas).show()  輸出結果23     '''24     def __init__(self, datas):25         self.datas = datas26         self.datas_len = len(datas)27 28     def _sort(self):29         #冒泡排序要排序n個數,由於每遍曆一趟只排好一個數字,30         #則需要遍曆n-1趟,所以最外層迴圈是要迴圈n-1次,而31         #每次趟遍曆中需要比較每歸位的數字,則要在n-1次比較32         #中減去已排好的i位元字,則第二層迴圈要遍曆是n-1-i次33         for i in range(self.datas_len-1):34             for j in range(self.datas_len-1-i):35                 if(self.datas[j] < self.datas[j + 1]):36                     self.datas[j], self.datas[j+1] = \37                             self.datas[j+1], self.datas[j]38 39     def show(self):40         print 'Result is:',41         for i in self.datas:42             print i,43         print ''44 45 if __name__ == '__main__':46     try:47         datas = raw_input('Please input some number:')48         datas = datas.split()49         datas = [int(datas[i]) for i in range(len(datas))]50     except Exception:51         pass52 53     bls = BubbleSort(datas)54     bls._sort()55     bls.show()

總結:

冒泡排序因為是在原數組上直接操作,所以它占的空間資源較少,在資料量不大的情況還是挺好的。但是由於演算法涉及雙重迴圈,所以在資料量大的情況下,程式啟動並執行時間是相當長的,因為要一次一次地遍曆資料。

最後有興趣的同學可以關注我的公眾號,可以隨時及時方便看我的文章。*^_^*

掃碼關注或者搜尋號:King_diary 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.