快速排序 模板

2022-02-23 10:45:05 字數 622 閱讀 3406

快速排序原理如下:

我們在排序的時候,用到了劃分的思想,隨機選擇乙個中軸,雙指標i, j,指標i從左往右掃瞄,指標j從右往左掃瞄,如果i < j 則進行交換,並且繼續迴圈,直到遇到中軸,這時候我們的i和j均為中軸(理由:因為i,j相等)。我們在中軸左右遞迴,假設遞迴到了最後,也就交換了最後兩個數。

時間複雜度分析,我們每次從l 掃瞄到 r,複雜度為t(n),左邊遞迴,右邊遞迴,時間複雜度為t(1/2 n), 接著繼續往下進行。

快速排序是乙個不穩定的排序演算法。

\[t(n) = 2 t(n/2) + n \\

t(n) = 2 t(2 t(n/4) + n/2) + n = 4 t(n/4) + 2n \\

t(n) = 4 t(2 t(n/8) + n/4) + 2n = 8 t(n/8) + 3n \\

... \\

t(1) = 0 \\

t(n) = n t(1) + (log(n)) * n = o(n logn)

\]

void quick_sort(int *q, int l, int r) 

quick_sort(q, l, j); quick_sort(q, j + 1, r);

}

排序 快速排序模板

以某個記錄 元素 為界 該記錄稱為支點或樞軸 將待排序列分成兩部分 一部分 所有記錄的關鍵字大於等於支點記錄的關鍵字 另一部分 所有記錄的關鍵字小於支點記錄的關鍵字 演算法描述 1 任取待排序記錄序列中的某個記錄 例如取第乙個記錄 作為基準 樞 按照該記錄的關鍵字大小,將整個記錄序列劃分為左右兩個子...

快速排序 模板

說明 經過本函式處理後,陣列itemarray中元素滿足prulefunc itemarray itemr itemarray iteml 為true,其中itemr iteml template t void quicksort itemarray,int iteml,int itemr,bool...

模板 快速排序

排序演算法可以說是從語言步入演算法的第一道坎了,其中最有代表性的莫過於快排。這裡模擬庫函式自帶sort的呼叫方式,寫起來相當自然清爽。樸素快速排序演算法的複雜度最好為o nlogn 最壞時能達到o n include include include include include include d...