Pagini recente » Cod sursa (job #3259602) | Cod sursa (job #1542596) | Cod sursa (job #2885565) | Cod sursa (job #1590273) | Cod sursa (job #2518192)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int v[3000000];
int main() {
FILE *fin = fopen( "sdo.in", "r" );
FILE *fout = fopen( "sdo.out", "w" );
int n, k, i, st, dr, pivotVal, b, e, aux;
fscanf( fin, "%d%d", &n, &k );
--k;
for ( i = 0; i < n; ++i ) {
fscanf( fin, "%d", &v[i] );
}
st = 0;
dr = n - 1;
srand( time( NULL ) );
while ( dr > st ) {
pivotVal = v[(rand() % ( dr - st + 1 )) + st];
b = st;
e = dr;
while ( v[b] < pivotVal ) {
++b;
}
while ( v[e] > pivotVal ) {
--e;
}
while ( b < e ) {
if ( b < e ) {
aux = v[b];
v[b] = v[e];
v[e] = aux;
++b;
--e;
}
while ( v[b] < pivotVal ) {
++b;
}
while ( v[e] > pivotVal ) {
--e;
}
}
if ( k <= e ) {
dr = e;
} else {
st = e + 1;
}
}
fprintf( fout, "%d", v[k] );
fclose( fin );
fclose( fout );
return 0;
}