選擇問題 選出無序陣列中的第k小的數(以排序順序)

2021-10-04 11:32:18 字數 915 閱讀 8513

#include

#include

#include

using

namespace std;

intpar

(vector<

int>

& v,

int l,

int r)

else

}swap

(v[i]

,v[r]);

return i;

}int

quickselectkth

(vector<

int>

&v,int l,

int r,

int k)

int p =

par(v,l,r)

;//這裡的par函式只能用l的,因為得到的v[p]左邊都是比它小的,右邊都是比它大的,h的則不可以,只是基於pivot分為兩半,v[p]不一定是pivot

int kth = p-l+1;

//這個是s-陣列的大小,不能直接用p,因為p是原陣列的下標,不是第幾小

if(kth == k)

return v[p]

;else

if(kth > k)

return

quickselectkth

(v,l,p-

1,k)

;else

return

quickselectkth

(v,p+

1,r,k-kth);}

intmain()

;int k =3;

int res =

quickselectkth

(v,0

,v.size()

-1,k);

cout

}

尋找單個無序陣列中第K小的數字

1 排序 對陣列進行排序 然後前k個元素就是需要查詢的元素,排序的方法可以採用快速排序,但是我們知道在快速 排序中如果已經是有序的陣列,採用快速排序的時間複雜度是o n 2 為了解決這種問題,通常選擇隨機選擇乙個 陣列值pivot作為基準,將陣列分為s1 pivot和s2 pivot,這樣就能避免快...

無序數字中位數 如何在無序陣列中查詢第K小的值

如題 給定乙個無序陣列,如何查詢第k小的值。例子如下 在乙個無序陣列,查詢 k 3 小的數 輸入 arr 輸出 7在乙個無序陣列,查詢 k 4 小的數 輸入 arr 輸出 10幾種思路如下和複雜度分析如下 1 最簡單的思路直接使用快排,堆排或者歸併排,排序之後取陣列的k 1索引的值即可,時間複雜度為...

程式設計練習 求無序陣列第k小的數

為同寢的傢伙寫了乙個求乙個無序陣列中第k小數的程式。思想就是快排的思想。找乙個點,然後放到末尾,然後將小於這個數的值放在陣列前面,大於這個值的放在陣列後面,然後在將這個末尾的數放回。這個末尾數放入的位置i代表已經找到第i小的數。下面你應該明白了吧,放入的位置如果是k,恭喜你找到了第k小的數。同樣找到...