#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...