Cod sursa(job #2466572)

Utilizator Tudor06MusatTudor Tudor06 Data 2 octombrie 2019 17:21:54
Problema Sortare prin comparare Scor 40
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#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;
}