期望複雜度:0(n)
最壞複雜度:0(n*n)
方法:通過呼叫快速排序的子程式:random_paration(),根據返回的中樞元素單方向的處理集合中資料。
**中實現遞迴和迭代的random_select()。
view plaincopy to clipboardprint?
1 #include
2 #include
3 #include
4 using namespace std;
5
6 int random_paration(int *a,int s,int e)
7
33 return l;
34
35
36 }
37 //尋找陣列a中第i小的元素
38 //s:陣列a的起始位置
39 //e:陣列a的結束位置
40 /*遞迴方法
41 int random_select(int *a,int s,int e,int i)
42
68 int q = random_paration(a,s,e);
69 int k = q-s+1;
70 if(k==i)
71 return a[q];
72 if(k
9 2 第i個順序統計量
執行時間為 n include include include include using namespace std void input vector v int partition vector v,int s,int e 每次都隨機選擇乙個元素,並和最後乙個元素交換 srand unsign...
亂序陣列中第k大的數(順序統計量)
該問題是順序統計量中十分經典的問題。使用快排中的分割槽法,將第k大的數排序。若雙向掃瞄分割槽加上三點中值法或絕對中值法,可以保證在 o n 時間裡找出第k大的數。補充 可以直接使用c stl中的nth element函式 一定注意使用形式!1 2 第k大的數 3 4int part int arr,...
C 求無序序列中第k小的元素
c 求無序序列中第k小的元素 利用優先佇列 priority queue 求出乙個無序整數列中第k小的元素 先輸入序列長度 再輸入該整數列 最後輸入第k小元素位置 k 實驗例子 5 序列長度 2 4 3 6 5 該整數列 2 第k小元素位置 3 輸出結果 如下 include include usi...