快速排序的描述
與歸併排序一樣,快速排序也使用了分治思想。具體步驟:
分解:陣列 a[p...r] 被劃分為兩個子陣列(可能為空) a[p...q-1] 和 a[q+1...r] ,使得 a[p...q-1] 中的每乙個元素都小於等於 a[q],而 a[q] 小於等於 a[q+1...r] 中的每個元素。
解決:通過遞迴呼叫快速排序,對子陣列 a[p...q-1] 和 a[q+1...r] 進行排序。
合併:因為子陣列都是原址排序的,所以不需要合併操作,陣列 a[p...r] 已經有序。
**實現
template「分解」步驟**void quicksort(t a, int p, int
r) }
快速排序的效能
快速排序的執行時間依賴於分解是否平衡。如果分解是平衡的,即兩個子問題規模相近,那麼快速排序演算法效能與歸併排序一樣。如果分解是不平衡的,最壞情況為兩個子問題分別包含了 n-1 個元素和 0 個元素,那麼快速排序的效能就接近於插入排序了。而平衡與否又依賴於用於劃分的元素,為了降低最壞情況發生的概率,可以隨機選取用於劃分的元素。
**實現
第七章 排序
排序就是將原本無序的序列重新排列成有序的序列 如果待排序表中有兩個元素ri rj,其對應的關鍵字keyi keyj,且在排序前ri在rj前面,如果使用某一排序演算法排序後,ri仍然在rj的前面,則稱這個排序演算法是穩定的,否則稱排序演算法是不穩定的。首先以乙個元素為有序的序列,然後將後面的元素依次插...
第七章快速排序之「快速排序QUICKSORT」
include using namespace std int partition int a,int lo,int hi while a j key if i j else return j void quicksort int a,int lo,int hi int j partition a,...
演算法導論 第七章《快速排序》
本章介紹了快速排序及其演算法分析,快速排序採用的是分治演算法思想,對包含n個數的輸入陣列,最壞情況下執行時間為 n 2 但是平均效能相當好,期望的執行時間為 nlgn 另外快速排序能夠就地排序 我理解是不需要引入額外的輔助空間,每次劃分能確定乙個元素的具體位置 在虛擬環境中能很好的工作。快速排序演算...