快速排序以及基於快排思想的找前k個最大數

2022-03-15 05:45:58 字數 858 閱讀 6737

**:

1

int partition(vector &v, int head, int

rear)

7swap(v[head], v[rear]);

8while (v[head] >= key && head 11swap(v[rear], v[head]);

1213

}14 v[head] =key;

15 ++my_count;

16return

head;17}

1819

void quicksort(vector &v, int head, int

rear)

26 }

note: partition函式中 v[rear] <= key 以及 v[head] >= key 表示式必須包含等於的判斷,否則當陣列兩頭的數相等時將會造成死迴圈例如

partition函式:最慢情況下快速排序會進行 size()- 1 次 partition函式,而每次呼叫,partition函式會選擇乙個基準數,例如v[head]或者v[rear],或者任意乙個陣列中的數。之後分別從兩頭掃瞄,碰到比基準數大或者小的數就與上乙個head或rear交換,或者直到head大於等於rear時,此次迴圈結束。

quicksort函式:該函式採用遞迴的方法,每次呼叫一次partition函式,得到乙個基準數的索引和相對基準數有序的數列,之後將該基準數左邊的陣列和右邊的陣列分別呼叫quicksort函式,也就是它本身。直到陣列中只有乙個數時,這條遞迴序列便結束。

基於快速排序的查詢前k個最大數

基於快排思想的第 前 k大 小

演算法思路就是根據快排的partition,先隨機選擇乙個分隔元素 或a 0 將陣列分為 小於a p 的元素 a p 大於a p 的元素 如果這時候n p 1等於k的話,a p 就是所求的第k大,否則如果n p 1 k,那麼說明第k大元素應該是在 大於a p 的元素 裡,所以再partition這部...

Java 快速排序,以及雙基快排

單基準快排 使用 quicksort arr,0,arr.length 1 排序整個陣列 private static void quicksort int arr,int left,int right return lt的左邊放小於基準值的值 gt的右邊放大於基準值的值 lt與gt其中乙個是基準值...

基於快排思想的題目(一) 荷蘭旗問題

基於快排思想的題目 一 荷蘭旗問題 快排的實現大家估計都知道,主要就是乙個partition和交換的過程。這個思想其實是很巧妙的,基於此,很多題目都可以用它來很好地解決。這篇我們講到了註明的荷蘭旗問題,就是可以用到快排的思想 後續還有一系列的題目,應該都是可以用到快排思想的,後面慢慢整理ing 這個...