Cod sursa(job #1229345)

Utilizator thinkphpAdrian Statescu thinkphp Data 16 septembrie 2014 23:28:04
Problema Sortare prin comparare Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.32 kb
#include <stdio.h>
#define MAX 500010
#define FIN "algsort.in"
#define FOUT "algsort.out"

int vec[MAX],n;

void read();
void sort();
void qs(int,int);
int partition(int,int);
void write();


int main() {
 
    read();
    sort(); 
    write();

    return 0;
}

void read() {

     int i;

     freopen(FIN, "r", stdin);

     scanf("%d", &n);

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

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

     fclose( stdin );  
};

void sort() {

     qs(0, n-1);
 
};

void qs(int li, int ls) {

     int pos;

     if(li < ls) {

        pos = partition(li,ls);

        qs(li, pos - 1);

        qs(pos + 1, ls);
     }  
};

int partition(int li, int ls) {

     int i = li,

         j = ls,

         i1 = 0,

         j1 = -1,

         aux;

         while(i < j) {

            if(vec[i] > vec[j]) {

               aux = vec[i];
               vec[i] = vec[j];
               vec[j] = aux;
 
               aux = i1;
               i1 = -j1;
               j1 = -aux; 
            }

            i = i + i1;
            j = j + j1;
         }

   return i;
}


void write() {

     int i;

     freopen(FOUT, "w", stdout);

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

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

     fclose(stdout);
};