知名搜尋與排序演算法
過去的電腦科學家,根據演算法設計策略,發展出各種排序、搜尋資料的演算法,讓我們在這個章節做介紹,並且使用Python來進行實際操作。
排序演算法
- 採取列舉法策略
- Bubble Sort
- Quick Sort
- Insertion Sort
- 採取分治法策略
- Selection Sort
- Merge Sort (補充教材)
- Heap Sort (補充教材)
氣泡排序法(Bubble Sort)
藉由逐次比較相鄰的兩筆資料,並依照排序條件(由大至小或由小至大)交換資料直到排序完成為止
插入排序法(Insertion Sort)
插入排序法的原理是,從未排序的數列裡,每次取一個值並逐一和已排序的數列進行比較,並插入到已排序的數列中

選擇排序法(Selection Sort)
選擇排序法(Selection Sort)
是從未排序的數列中選取最小(或最大)的元素,放置到排序數列的起始位置,直到所有數列皆排序完畢。
- 給定一個數字組合和初始最小值位值(一開始 index 為 0)
- 經過第一輪每個數字和最小值比較,將取出的最小值和第一個數字位置對調(選擇最小的值)
- 接著除了第一個已排序好的數字外,其餘數字持續最小值比較(index 為 1),若有更小值則和 index 為 1(第二個)值互換
- 持續進行比較到能比較的值只剩下一個,則由小到大的排序完成

快速排序法(Quick Sort)
快速排序法是排序演算法的一種,使用Divide and Conquer的演算法來實作。其概念是從數列中挑選一個基準點
,大於基準的放一邊,小於的放一邊,如此循環最後可完成排序。


以上的步驟中:
pivot可以任意挑選,在此是固定挑選數列(矩陣)的最後一個元素。
在「新的數列」上只是重複相同的步驟(選pivot、調整數列),可以利用遞迴(recursion)處理。
排序法總結
排序演算法 |
時間複雜度 |
空間複雜度 |
氣泡排序法 |
O(n)~O(n2) |
O(1) |
選擇排序法 |
O(n2) |
O(1) |
插入排序法 |
O(n)~O(n2) |
O(1) |
快速排序法 |
O(nlog n) |
Ο(log n)~Ο(n) |
搜尋演算法
我們介紹三種比較常見的資料搜尋方法
- 線性搜尋法(Linear Search)
- 二元搜尋法(Binary Search)
- 插分搜尋法(Interpolation Search)
線性搜尋法(Linear Search)
- 定義:從第一個資料開始取出,依序一一與「目標資料」相互比較,直到找到所要元素或所有資料均尋找完為止,此方法稱「線性搜尋」。
- 優點:
- 程式容易撰寫。
- 資料不須事先排序(Sorting)
- 缺點: 搜尋效率比較差(平均次數=(N+1)/2),不管是否有排序,每次都必須要從頭到尾找一次
二分搜尋法(Binary Search)
- 定義:如果資料已先排序過,則可使用二分法來進行搜尋。二分法是將資料分成兩部份,再將鍵值與中間值比較,如鍵值相等則找到,小於再比前半段,大於再比後半段。如此,分段比較至找到或無資料為止。
- 優點:搜尋效率佳(平均次數=Log2N)。
- 缺點:
- 資料必需事先排序。
- 檔案資料必需使是可直接存取或隨機檔。
插分搜尋法(Interpolation Search)
插分搜尋法是基於二元搜尋法優化的搜尋演算法,藉由目前搜尋範圍的近似線公式來導出要搜尋的元素可能會存在或是可能比較接近的索引位置。
