Cod sursa(job #1282545)

Utilizator thinkphpAdrian Statescu thinkphp Data 4 decembrie 2014 14:21:19
Problema Sortare prin comparare Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
#define FIN "algsort.in"
#define FOUT "algsort.out"
#define MAXN 500005

typedef unsigned int uint;

uint arr[ MAXN ],

     n;

void read() {

     uint i;

     freopen(FIN, "r", stdin);

     scanf("%d", &n);

     for(i = 0; i < n; i++) scanf("%d", &arr[ i ]); 

     fclose( stdin );

};

void swap(uint *i, uint *j) {

     uint temp;

     temp = *i;

     *i = *j;

     *j = temp;
};

uint pivot(int left, int right) {

    int i = 0,

        j = -1,

        aux;

     while(left < right) {
 
           if(arr[left] > arr[right]) {

              swap(arr + left, &arr[right]);

              aux = i;

              i = -j;

              j = -aux;    
           }

         left += i;

         right += j;
     } 

     return left;    
};

void _qsort(int left, int right) {

     uint p;

     if(left < right) {

        p = pivot(left, right);

        _qsort(left, p - 1);           

        _qsort(p + 1, right);
     } 
}

void qsort() {

     _qsort(0, n - 1);
};

void write() {

   uint i;

   freopen(FOUT, "w", stdout);

   for(i = 0; i < n; i++) printf("%d ", arr[ i ]); 

   fclose( stdout );
}

int main() {

    read();

    qsort();

    write();

    return(0);
};