python數據結構與算法(12)
阿新 • • 發佈:2018-11-29
技術 sort type 實現 每次 blog pytho 數據結構 次數 排序與搜索
排序算法(英語:Sorting algorithm)是?種能將?串數據依照特定順序進? 排列的?種算法。
排序算法的穩定性
穩定性:穩定排序算法會讓原本有相等鍵值的紀錄維持相對次序。也就是如 果?個排序算法是穩定的,當有兩個相等鍵值的紀錄R和S,且在原本的列表 中R出現在S之前,在排序過的列表中R也將會是在S之前。
當相等的元素是?法分辨的,?如像是整數,穩定性並不是?個問題。然 ?,假設以下的數對將要以他們的第?個數字來排序。
(4, 1) (3, 1) (3, 7)(5, 6)
在這個狀況下,有可能產?兩種不同的結果,?個是讓相等鍵值的紀錄維持 相對的次序,?另外?個則沒有:
(3, 1) (3, 7) (4, 1) (5, 6) (維持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改變)
不穩定排序算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序 算法從來不會如此。不穩定排序算法可以被特別地實現為穩定。作這件事情 的?個?式是??擴充鍵值的?較,如此在其他??相同鍵值的兩個對象間 之?較,(?如上?的?較中加?第?個標準:第?個鍵值的??)就會被 決定使?在原先數據次序中的條?,當作?個同分決賽。然?,要記住這種 次序通常牽涉到額外的空間負擔。
排序與搜索
冒泡排序的分析
交換過程圖示(第?次):
排序算法(英語:Sorting algorithm)是?種能將?串數據依照特定順序進? 排列的?種算法。
排序算法的穩定性
穩定性:穩定排序算法會讓原本有相等鍵值的紀錄維持相對次序。也就是如 果?個排序算法是穩定的,當有兩個相等鍵值的紀錄R和S,且在原本的列表 中R出現在S之前,在排序過的列表中R也將會是在S之前。
當相等的元素是?法分辨的,?如像是整數,穩定性並不是?個問題。然 ?,假設以下的數對將要以他們的第?個數字來排序。
(4, 1) (3, 1) (3, 7)(5, 6)
(3, 1) (3, 7) (4, 1) (5, 6) (維持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改變)
不穩定排序算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序 算法從來不會如此。不穩定排序算法可以被特別地實現為穩定。作這件事情 的?個?式是??擴充鍵值的?較,如此在其他??相同鍵值的兩個對象間 之?較,(?如上?的?較中加?第?個標準:第?個鍵值的??)就會被 決定使?在原先數據次序中的條?,當作?個同分決賽。然?,要記住這種 次序通常牽涉到額外的空間負擔。
冒泡排序
冒泡排序(英語:Bubble Sort)是?種簡單的排序算法。它重復地遍歷要排 序的數列,?次?較兩個元素,如果他們的順序錯誤就把他們交換過來。遍 歷數列的?作是重復地進?直到沒有再需要交換,也就是說該數列已經排序 完成。這個算法的名字由來是因為越?的元素會經由交換慢慢“浮”到數列的 頂端。
冒泡排序算法的運作如下:
?較相鄰的元素。如果第?個?第?個?(升序),就交換他們兩個。 對每?對相鄰元素作同樣的?作,從開始第?對到結尾的最後?對。這 步做完後,最後的元素會是最?的數。 針對所有的元素重復以上的步驟,除了最後?個。 持續每次對越來越少的元素重復上?的步驟,直到沒有任何?對數字需 要?較。
交換過程圖示(第?次):
def bubble_sort(alist): for j in range(len(alist)-1,0,-1): # j表示每次遍歷需要?較的次數,是逐漸減?的
for i in range(j): if alist[i] > alist[i+1]: alist[i], alist[i+1] = alist[i+1], alist[i]
li = [54,26,93,17,77,31,44,55,20] bubble_sort(li) print(li)
時間復雜度
最優時間復雜度:O(n) (表示遍歷?次發現沒有任何可以交換的元素, 排序結束。) 最壞時間復雜度:O(n ) 穩定性:穩定
冒泡排序的演示
python數據結構與算法(12)