Pagini recente » Cod sursa (job #278958) | Cod sursa (job #1876791) | Cod sursa (job #64847) | Cod sursa (job #979974) | Cod sursa (job #3173980)
// quicksort
#include <fstream>
#include <algorithm>
using namespace std;
#define MAXN 3000000
int a[ MAXN ];
ifstream in( "sdo.in" );
ofstream out( "sdo.out" );
int kth_element( int bg, int nd, int k )
{
if( bg == nd )
{
return a[ bg ] ;
}
int pivot, left, right, aux;
pivot = a[ bg + rand() % ( nd - bg + 1 ) ];
left = bg - 1;
right = nd + 1;
while( left < right )
{
do
{
left++;
}
while( a[ left ] < pivot );
do
{
right--;
}
while( a[ right ] > pivot );
if( left < right )
{
aux = a[ left ];
a[ left ] = a[ right ];
a[ right ] = aux;
}
}
int as = right - bg + 1;
if( as >= k )
{
return kth_element( bg, right, k );
}
return kth_element( right + 1, nd, k - as );
}
int main()
{
int n, i, answer, k;
in >> n >> k;
for( i = 0; i < n; i++ )
{
in >> a[ i ];
}
answer = kth_element( 0, n - 1, k );
out << answer;
return 0;
}