Cod sursa(job #1229404)

Utilizator thinkphpAdrian Statescu thinkphp Data 17 septembrie 2014 08:57:57
Problema Sortare prin comparare Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.42 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,
 
         j,
 
         i1,
 
         j1,
 
         xor;

         i = li; j = ls; i1 = 0; j1 = -1;
        
 
         while(i < j) {
 
            if(vec[i] > vec[j]) {
 
               xor = vec[i]^vec[j];

               vec[i] = xor^vec[i];

               vec[j] = xor^vec[j];
  
               xor = i1;
               i1 = -j1;
               j1 = -xor;
            }
 
            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);
};