Pagini recente » Cod sursa (job #153732) | album2 | Cod sursa (job #2059876) | Cod sursa (job #967223) | Cod sursa (job #2670063)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 3000000
int v[NMAX];
void sdo( int v[], int k, int begin, int end ) {
int pivot = v[begin+rand()%(end-begin+1)];
int b = begin, e = end, aux;
while( v[b] < pivot )
b++;
while( v[e] > pivot )
e--;
while( b < e ) {
aux = v[b];
v[b] = v[e];
v[e] = aux;
do
b++;
while( v[b] < pivot );
do
e--;
while( v[e] > pivot );
}
if( begin < e && k < e )
sdo( v, k, begin, e );
else if( e + 1 < end )
sdo( v, k, e + 1, end );
}
int main() {
FILE *fin, *fout;
int n, k, i;
fin = fopen( "sdo.in", "r" );
fscanf( fin, "%d%d", &n, &k );
k--;
for( i = 0; i < n; i++ )
fscanf( fin, "%d", &v[i] );
fclose( fin );
sdo( v, k - 1, 0, n - 1 );
fout = fopen( "sdo.out", "w" );
fprintf( fout, "%d", v[k] );
fclose( fout );
return 0;
}