快排擴充套件 第k小的數

2022-07-03 19:39:17 字數 921 閱讀 3428

使用快排中的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...