使用快排中的partition方法,可以很快找到乙個無序序列中的第k小的數。
思想:對於乙個陣列a[0...n-1],分段成a[0...st-1],a[s],a[st+1...n-1]
分組後,a[0...st-1]裡面的元素都小於等於a[st],a[st+1...n-1]裡面的元素都大於等於a[st]. 所以,如果 st==k-1,那麼a[st]就是要求的數。
如果 st>k-1,那麼要求的數在a[0...st-1]裡。 如果 st#include
#include
#include
#include
using namespace std;
const int num = 20;
int partition(int a,int left, int right)
swap(a[left],a[right]);
swap(a[l],a[right]);
return right;
}int search(int a, int left, int right, int k)
else
local_right = position - 1;
}//cout << "position : ";int k = 0;
srand(time(null));
for(int i = 0; i < num; i++)
a[i] = rand() % 100;
k = rand() % num;
//copy(a,a + num, ostream_iterator(cout, " "));
coutcout << endl;
copy(a + num / 2,a + num , ostream_iterator(cout, " "));
return 0;
}
快排的思想求第K小的數
描述輸入n 個數,m 次查詢。每次查詢給出乙個數x。要求 每次查詢輸出前 x個數中第 i小的數。i為第 i次查詢 你可以假設 m n xi xi 1 xi 2 xm xm n 輸入 line0 t line1 n,m line2 linen 1 num1,numn linen 2 linen 2 m...
最小的k個數 第k小的數(利用快排,堆排序)
快排 若求top m個元素,則只需把下面的程式裡的k換乘n m即可 利用快排求最小的k個數,第k小的數 void getleastknum int input,int n,int output,int k else for int i 0 i 其中,output k 1 就是第k小的數 partit...
第k個小的數 bfprt演算法與快排改進
public static intfindk int nums,int m,int n int k while i temp if i nums m nums j nums j temp if j 1 k else if j 1 k else public static void main stri...