尋找第K大的數字

2021-07-02 17:34:36 字數 1116 閱讀 3421

#include using namespace std;

//快速排序的劃分函式

int partition(int data,int i,int j)

//將》=x的元素換到左邊區域

//將<=x的元素換到右邊區域

if (i(r-l+1)||k<1)//k應該在[1,r-l+1]之間

throw std::exception("invalued k");

int i,j;

if (l == r) //遞迴結束

i = partition(a,l,r);//劃分

j = i-l+1;//距開始的長度,i為第j大的數字

if(k == j) //遞迴結束,找到第k大的數

return a[i];

if(k < j)

else

return random_select(a,i+1,r,k-j);//遞迴呼叫,在後面部分查詢第k大的數

}int main()

; cout<

#include using namespace std;

//快速排序的劃分函式

int partition(int data,int len, int i, int j)

//將》=x的元素換到左邊區域

//將<=x的元素換到右邊區域

if (i < j)

while (i < j&&pivot <= data[i])

if (ilen || k <= 0)

int i = 0;

int j = len - 1;

int index = partition(a, len, i, j);

while (index+1!= k)

else

}int result = a[k-1];

return result;

}int main()

; cout << random_select(a,10, 1) << endl;

cout << random_select(a, 10,3) << endl;

return 0;

}

尋找最小k個數或者尋找第K大的數字

輸入n個整數,找出最小的前k個數字 或者第k大的數字 例如輸入4,5,1,6,2,7,3,8這八個數,則輸出最小4個數是1,2,3,4.o n 解法,需要修改輸入陣列。可以採用快速排序partition函式來解決這個問題。快排的partition函式所完成的功能是將小於pivot的數放在partit...

尋找第k大數字

sicily description 經過長時間的籌備工作,在jourk,ronny,plipala,阿長,阿沈等人的努力下,dm實驗室建立起自己的系列 其中包括三個大板塊 dmoj首頁 dmoj論壇 dmoj部落格。作為乙個大型的 資料的加工處理需要用到很多演算法系統模組,通過這些模組對系統主資料...

Data Structures 尋找第k大

對於bst,無壓力的可以,所以無需贅言,請見 1 program bst kthfind input,output 2 type point node 3 node record4 data,leftsum,rightsum longint 5 left,right point 6 end 7 va...