Cod sursa(job #1240031)

Utilizator thinkphpAdrian Statescu thinkphp Data 10 octombrie 2014 11:30:47
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>
#define FIN "algsort.in"
#define FOUT "algsort.out"
#define MAXN 500005

int vec[ MAXN ], 
    N;

void quicksort(int li, int ls) {
 
    int i,
        j,
        aux,
        piv;

    i  = li;
    j  = ls;

    piv = vec[(i + j) >> 1];

    while( i <= j ) {

          while( vec[ i ] < piv) {

               i++;
          }    

          while( vec[ j ] > piv) {

               j--; 
          }    

          if(i<=j) {

              aux = vec[i]^vec[j]; 
              vec[i] = aux^vec[i];
              vec[j] = aux^vec[j];
              i++;
              j--;   
          } 
    }

    if((i-1) > li) quicksort(li, i - 1); 

    if(i < ls) quicksort(i, ls);
}

void write() {

     int i;

     freopen(FOUT, "w", stdout);

     for(i = 0; i < N; i++) {

         printf("%d ", vec[ i ]);
     }

     fclose( stdout );
}

void read() {

     int i;
 
     freopen(FIN, "r", stdin);

     scanf("%d",&N);

     for(i = 0; i < N; i++) {

         scanf("%d", &vec[ i ]);
     } 

     fclose( stdin );
}

int main() {

    read();
    quicksort( 0, N - 1 );   
    write(); 

    return(0);
}