Cod sursa(job #1229409)

Utilizator thinkphpAdrian Statescu thinkphp Data 17 septembrie 2014 09:16:25
Problema Sortare prin comparare Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.19 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;
 
        pos = partition(li, ls);
 
        if(li < pos - 1) qs(li, pos - 1);
 
        if(ls > pos + 1) qs(pos + 1, ls);
};
 
int partition(int li, int ls) {

    int i, s, p, temp;

    p = vec[ ls ], 
    s = li - 1;
     
    for(i = li; i <= ls; i++) {

        if(vec[i]<=p) {
           ++s;
           temp = vec[s];
           vec[s] = vec[i];
           vec[i] = temp;  
        } 
    }

   return s;
}
 
 
void write() {
 
     int i;
 
     freopen(FOUT, "w", stdout);
 
     for(i = 0; i < n; i++) {
 
         printf("%d ", vec[ i ]);
     }
 
     fclose(stdout);
};