1. 程式人生 > >Python排序算法——冒泡排序

Python排序算法——冒泡排序

一輪 inf 穩定 tps 位置 永遠 實現 返回 順序

有趣的事,Python永遠不會缺席!

如需轉發,請註明出處:小婷兒的python https://www.cnblogs.com/xxtalhr/p/10786904.html

一、冒泡排序(Bubble Sort)

  冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法。它重復地走訪過要排序的元素列,依次比較兩個相鄰的元素,一層一層的將較大的元素往後移動,其現象和氣泡在上升過程中慢慢變大類似,故成為冒泡排序

1、原理

  • 從第一個和第二個開始比較,如果第一個比第二個大,則交換位置,然後比較第二個和第三個,逐漸往後
  • 經過第一輪後最大的元素已經排在最後,所以重復上述操作的話第二大的則會排在倒數第二的位置。

  • 那重復上述操作n-1次即可完成排序,因為最後一次只有一個元素所以不需要比較

舉個例子,假設我現在有一個數列需要使用冒泡來排序 [11, 99, 33 , 69, 77, 88, 55, 11, 33, 36,39, 66, 44, 22],我們來看看使用冒泡的詳細步驟:

  • 首先11和99比較大小,99大,99繼續和後面的作比較,直到最後一個元素,第一輪完了,列表是 [11, 33 , 69, 77, 88, 55, 11, 33, 36,39, 66, 44, 22, 99]

  • 然後,繼續第一輪操作,即第二輪比較完後,列表為 [11, 33 , 69, 77, 55, 11, 33, 36,39, 66, 44, 22, , 88,99]

  • 以此類推,最終得到列表 [11, 11, 22, 33, 33, 36, 39, 44, 55, 66, 69, 77, 88, 99]

2、代碼

  實現思路: 使用雙重for循環,內層變量為i, 外層為j,在內層循環中不斷的比較相鄰的兩個值(j, j+1)的大小,如果j+1的值大於j的值,交換兩者位置,每循環一次,外層的i增加1,等到i等於(len(arr) - 1)的時候,結束循環

  第一次看不懂很正常,不要灰心,下面是使用代碼的實現

 1 def bubble_sort(arr):
 2     """冒泡排序"""
 3     # 第一層for表示循環的遍數
4 for i in range(len(arr) - 1): 5 # 第二層for表示具體比較哪兩個元素 6 for j in range(len(arr) - 1 - i): 7 if arr[j] > arr[j + 1]: 8 # 如果前面的大於後面的,則交換這兩個元素的位置 9 arr[j], arr[j + 1] = arr[j + 1], arr[j] 10 return arr 11 12 bubble_sort([11, 99, 33 , 69, 77, 88, 55, 11, 33, 36,39, 66, 44, 22])
13 #返回結果 [11, 11, 22, 33, 33, 36, 39, 44, 55, 66, 69, 77, 88, 99]

3、特點

    冒泡排序是一種簡單直接暴力的排序算法,為什麽說它暴力?因為每一輪比較可能多個元素移動位置,而元素位置的互換是需要消耗資源的,所以這是一種偏慢的排序算法,僅適用於對於含有較少元素的數列進行排序

  • 穩定性:我們從代碼中可以看出只有前一個元素大於後一個元素才可能交換位置,所以相同元素的相對順序不可能改變,所以它是穩定排序
  • 比較性:因為排序時元素之間需要比較,所以是比較排序

  • 時間復雜度:因為它需要雙層循環n*(n-1)),所以平均時間復雜度為O(n^2)

  • 空間復雜度:只需要常數個輔助單元,所以空間復雜度為O(1),我們把空間復雜度為O(1)的排序成為原地排序(in-place)

  • 記憶方法:想象成氣泡,一層一層的往上變大

結果   

  Successfully !!!

  有趣的事,Python永遠不會缺席!還不來加我,瞅什麽瞅。

技術分享圖片

Python排序算法——冒泡排序