給定n個元素和乙個整數k(1 <= k <= n),找出這n個元素中的第k小的元素
將陣列a[p,r]劃分成a[p,q]和a[q+1,r],是的a[p,q]中的每個元素都不大於a[q+1,r]中的每個元素
接著計算子陣列a[p, q]中元素的個數m:
int
randomselect
(int
*a,int p,
int r,
int k)
intrandompartition
(int
*a,int p,
int r)
intpartition
(int
*a,int p,
int r)
}swap
(a[i +1]
, a[r]);
return i +1;
}
時間複雜度:
最壞情況下:o(n^2),在找最小元素時,總是在最大元素出劃分
平均時間複雜度:o(n)
NOIP提高組模擬 快速荷葉葉變換
我們可以把式子進行拆分,變成 n i 1 nmodi mj 1 m modj 也就是前一半和後一半可以分開計算。假設計算 n i 1 nmodi 列舉出所有情況,發現可以進一步推出公式n2 mi 1 n i i 再推導,發現了對於某乙個i來說,若是 nmodi 0 那麼 nmod i 1 一定等於 ...
選擇排序,快排,冒排
基本思想 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢 在待排序資料中,選出最小的乙個數與...
排序 選擇 冒泡 快排
簡單介紹三種常見的排序方法 選擇 冒泡 快排。從大到小排列 選擇排序是在所有資料中先選擇第乙個資料作為最大值,依次和後面的每乙個資料比較,如果比最大值大,替換最大值並且記住索引,遍歷結束後,通過索引把最大值和第乙個資料替換。後面的資料依次執行一遍,就可以得到從大到小排列的資料了。如下 4 void ...