Pagini recente » Cod sursa (job #1996298) | Cod sursa (job #1079557) | Cod sursa (job #1601018) | Cod sursa (job #1913727) | Cod sursa (job #2466575)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define NMAX 500000
#define BSIZE 10000
int v[NMAX];
char buf[BSIZE];
int ix = BSIZE;
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 );
}
FILE *fin = fopen( "algsort.in", "r" ), *fout = fopen( "algsort.out", "w" );
char chr() {
if ( ix == BSIZE ) {
fread( buf, 1, BSIZE, fin );
ix = 0;
}
ix ++;
return buf[ix - 1];
}
int nr() {
int nr = 0;
char ch;
ch = chr();
while ( ch >= '0' && ch <= '9' ) {
nr = nr * 10 + ch - '0';
ch = chr();
}
return nr;
}
int main() {
int i, n;
n = nr();
for ( i = 0; i < n; i ++ ) {
v[i] = nr();
}
QuickSort( 0, n - 1 );
for ( i = 0; i < n; i ++ ) {
fprintf( fout, "%d ", v[i] );
}
return 0;
}