1. 程式人生 > >冒泡排序之python

冒泡排序之python

lag 重復 復雜度 ase n) 技術分享 關鍵字 image 算法

冒泡排序(Bubble sort)

兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序記錄為止。

1.算法描述:

  • 比較相鄰的元素。如果第一個比第二個大,就交換它們兩個;
  • 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
  • 針對所有的元素重復以上的步驟,除了最後一個;
  • 重復步驟1~3,直到排序完成。

技術分享圖片

2.算法屬性:

  • 時間復雜度O(n^2)
  • O(1) :額外的空間 (best case:在列表本來就拍好序的情況)
  • O(n2 ) :比較和交換
  • 適應性::O(n) 接近排序時
  • 交換排序的一種,屬於穩定排序

技術分享圖片

3.代碼實現

#算法時間復雜度為O(n*2)
‘‘‘ 為體現冒牌排序細節的不同, 我寫出簡單的冒泡排序方法:bubble_sort_easy 和改進後的冒泡排序方法:bubble_sort_imp ‘‘‘ #簡單的冒泡排序方法 #它的問題是當列表本來的順序就是比較完好;仍會花費復雜的時間空間來排序 def bubble_sort_easy(nums: list): for i in range(len(nums)): # 嵌套的二層循環的index從0開始,所以後面要len(nums)-i-1 for j in range(len(nums) - i - 1): if nums[j] > nums[j + 1]: nums[j], nums[j
+ 1] = nums[j + 1], nums[j] #交換 return nums nums = [1,2,5,8,4,3,6] bubble_sort_easy(nums) 輸出結果 [1, 2, 3, 4, 5, 6, 8] #改進的冒泡排序 ‘‘‘ 1.加入time計時runing時間 2.加入flag判斷列表是否已經不需要繼續排序,提高效率 ‘‘‘ def bubble_sort_imp(nums=list): import time start = time.time() #開始時間 for i in range(len(nums)): #
當 n pass is_sorted = True # 立個flag,當已經排好序的情況時引入Ture的is_sort for j in range(0, len(nums) - i - 1): if (nums[j + 1] < nums[j]): nums[j], nums[j + 1] = nums[j + 1], nums[j] #交換 is_sorted = False #立個False的flag if (is_sorted): break #當不需用到嵌套二層for時退出,提高效率 t = time.time() - start #記下運行時間 return nums,t nums = [1,2,5,8,4,3,6] bubble_sort_imp(nums) #運行結果 ([1, 2, 3, 4, 5, 6, 8], 0.0)

冒泡排序之python