python的冒泡排序
阿新 • • 發佈:2018-05-31
-i nbsp ima imp for BE urn 時間 圖片
簡介:
冒泡排序(Bubble sort):時間復雜度O(n^2)
交換排序的一種。其核心思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序記錄為止。
- 重復列表進行排序,比較每對相鄰的項目,如果它 們的順序錯誤,則交換它們
- 在每次通過時,未排序的最大元素已被“冒泡 ”到陣列末端的合適位置
- 重復列表直到不需要交換,這表明列表已被排序
屬性:
- 屬於穩定排序
- O(1) :額外的空間 (best case:在列表本來就拍好序的情況)
- O(n2 ) :比較和交換
- 適應性::O(n) 接近排序時
#算法時間復雜度為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的冒泡排序