Pagini recente » Cod sursa (job #1812600) | Cod sursa (job #994388) | Cod sursa (job #2229903) | Cod sursa (job #2730410) | Cod sursa (job #2529156)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define NMAX 3000000
int v[NMAX];
void quickSelect( int k, int st, int dr ) {
int i, pozpiv, aux;
while ( st < dr ) {
pozpiv = st; /// Pozitia pivotului este egala cu st
i = st + 1; /// Incepem de la st + 1
while ( i <= dr ) {
if ( v[i] <= v[pozpiv] ) { /// Daca elementul este mai mic sau egal decat pivotul
aux = v[pozpiv + 1]; /// Interschimbam pivotul cu urmatorul element
v[pozpiv + 1] = v[pozpiv];
v[pozpiv] = aux;
pozpiv ++;
if ( v[pozpiv - 1] > v[pozpiv] ) { /// Daca elementul interschimbat anterior nu este chiar elementul mai mic
aux = v[pozpiv - 1]; /// Il interschimbam cu elemntul interschimbat anterior
v[pozpiv - 1] = v[i]; /// cu pivotul
v[i] = aux;
}
}
i ++;
}
if ( k > pozpiv )
if ( pozpiv + 1 == st )
st = pozpiv;
else
st = pozpiv + 1;
else
if ( pozpiv == dr )
dr = pozpiv - 1;
else
dr = pozpiv;
}
}
FILE *fin, *fout;
int numar() {
char ch;
int nr = 0;
while ( isspace( ch = fgetc( fin ) ) );
do {
nr = nr * 10 + ch - '0';
} while ( isdigit( ch = fgetc( fin ) ) );
return nr;
}
int main() {
fin = fopen( "sdo.in", "r" );
fout = fopen( "sdo.out", "w" );
int n, k, i;
n = numar();
k = numar();
for ( i = 0; i < n; i ++ ) {
v[i] = numar();
}
quickSelect( k - 1, 0, n - 1 );
fprintf( fout, "%d", v[k - 1] );
fclose( fin );
fclose( fout );
return 0;
}