1. 程式人生 > >python數據結構與算法(12)

python數據結構與算法(12)

技術 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) (次序被改變)
不穩定排序算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序 算法從來不會如此。不穩定排序算法可以被特別地實現為穩定。作這件事情 的?個?式是??擴充鍵值的?較,如此在其他??相同鍵值的兩個對象間 之?較,(?如上?的?較中加?第?個標準:第?個鍵值的??)就會被 決定使?在原先數據次序中的條?,當作?個同分決賽。然?,要記住這種 次序通常牽涉到額外的空間負擔。
排序與搜索

冒泡排序
冒泡排序(英語: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)