順序統計量 求集合中第i小的元素 收藏

2021-05-05 00:32:03 字數 811 閱讀 2208

期望複雜度: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...