Pagini recente » Cod sursa (job #775427) | Cod sursa (job #2545199) | Cod sursa (job #1403332) | Cod sursa (job #343022) | Cod sursa (job #2466572)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 500000
int v[NMAX];
void QuickSort( int st, int dr ) {
int i, poz_piv, aux;
poz_piv = st;
i = st + 1;
while ( i <= dr ) {
if ( v[i] < v[poz_piv] ) {
aux = v[poz_piv]; /// Interschimbam pivotul cu elementul de dupa el
v[poz_piv] = v[poz_piv + 1];
v[poz_piv + 1] = aux;
poz_piv ++;
if ( v[poz_piv - 1] >= v[poz_piv] ) { /// Verificam daca elementul interschimbat anterior nu este chiar elementul mai mic
aux = v[i]; /// Interschimbam acum elementul gasit mai mic decat pivotul cu elementul din spatelele lui
v[i] = v[poz_piv - 1];
v[poz_piv - 1] = aux;
}
}
i ++;
}
if ( st < poz_piv - 1 ) {
QuickSort( st, poz_piv - 1 );
}
if ( dr > poz_piv + 1 )
QuickSort( poz_piv + 1, dr );
}
int main() {
FILE *fin = fopen( "algsort.in", "r" ), *fout = fopen( "algsort.out", "w" );
int i, n;
fscanf( fin, "%d", &n );
for ( i = 0; i < n; i ++ ) {
fscanf( fin, "%d", &v[i] );
}
QuickSort( 0, n - 1 );
for ( i = 0; i < n; i ++ ) {
fprintf( fout, "%d ", v[i] );
}
return 0;
}