標籤:img 屬性 通過 false start 它的 提高 二層 list
簡介:
冒泡排序(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 numsnums = [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,tnums = [1,2,5,8,4,3,6]bubble_sort_imp(nums)#運行結果([1, 2, 3, 4, 5, 6, 8], 0.0)
python的冒泡排序