分治法————找第k小的數
基本思路:用乙個基準數a(本題選用陣列的第乙個元素作為基準數)將s分割為兩部分,分別為小於等於a的s1和大於a的s2.記|s1|表示s1中元素的個數,|s2|表示s2中元素的個數。這樣當|s1|>k時,那麼第k小的數在s1中並且時s1中第k小的數;相反的,當|s1|#define maxn 10000
void swap(int *x,int *y)
int partition(int a,int left,int right)
while(leftk)/*當|s1|>k時則第k小的數在s1中*/
find(a,left,pos-1,k);/*在s1中找第k小的數*/
else if(pos < k)/*當|s1|find(a,pos,right,k);/*在s2中找第k小的數*/
else/*當|s1|=k時則基準數就是第k小的數*/
return a[pos-1]; }
int main(void)
分治法查詢第k小 大的數
1.問題 數學語言 給無序序列集中有n個元素,查詢次數m和乙個整數k,1 k n,找出這n個元素中第k大的元素。2.解析 利用快速排序,可以從序列中取乙個中點mid,然後把序列分成小於等於mid和大於等於mid的兩部分,由兩個部分的元素個數和k的大小關係可以確定這個數是在哪個部分,以此類推,進行遞迴...
找第k小的數
description 給出一串數列,輸出其中第k小的數 input對於每乙個測試案例,通過鍵盤逐行輸入,第1行是輸入整數n 和 k 如果這兩個整數是0 就表示結束,不需要再處理 n表示有n個數,k表示第k小的數,接下來一行輸入n個數 output輸出第k小的數的值 example input 5 ...
找第k小的數
設計乙個平均時間為o n o n o n 的演算法,在n 1 n 1000 n 1 n 1000 n 1 n 1 000 個無序的整數中找出第k小的數。因為本題要求使用o n o n o n 的時間,所以不能直接採用排序然後輸出的方法來解題。因此採用分治方法,先任意找陣列中的乙個元素 a aa 中的...