快排
给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列的第k小的数是多少。
原题链接
#include <iostream>
using namespace std;
const int N = 100010;
int n , k;
int q[N];
void quick_sort(int q[], int l , int r)
{
if(l >= r) return;
int x = q[ l + r >> 1 ];
int i = l -1 , j = r + 1 ;
while( i < j )
{
do i++ ; while( q[i] < x );
do j-- ; while( q[j] > x );
if(i < j) swap(q[i] , q[j]);
}
quick_sort(q , l , j );
quick_sort(q , j + 1 , r);
}
int main()
{
cin >> n >>k ;
for (int i = 0 ; i < n ; i ++)
cin >> q[i] ;
quick_sort ( q , 0 , n-1 );
cout << q[k - 1]<< endl ;
return 0;
}