1. 程式人生 > >python資料結構與演算法(12)

python資料結構與演算法(12)

排序與搜尋
排序演算法(英語: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)是⼀種簡單的排序演算法。它重複地遍歷要排 序的數列,⼀次⽐較兩個元素,如果他們的順序錯誤就把他們交換過來。遍 歷數列的⼯作是重複地進⾏直到沒有再需要交換,也就是說該數列已經排序 完成。這個演算法的名字由來是因為越⼩的元素會經由交換慢慢“浮”到數列的 頂端。
氣泡排序演算法的運作如下:
⽐較相鄰的元素。如果第⼀個⽐第⼆個⼤(升序),就交換他們兩個。 對每⼀對相鄰元素作同樣的⼯作,從開始第⼀對到結尾的最後⼀對。這 步做完後,最後的元素會是最⼤的數。 針對所有的元素重複以上的步驟,除了最後⼀個。 持續每次對越來越少的元素重複上⾯的步驟,直到沒有任何⼀對數字需 要⽐較。
氣泡排序的分析
交換過程圖示(第⼀次):
python資料結構與演算法(12)


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)