Cod sursa(job #1335570)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 5 februarie 2015 18:24:26
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#define MAXN 500000
int v[MAXN], aux[MAXN];
inline void merge(int a, int b, int x, int y){
    int i=a, j=x, k=0;
    while((i<=b)&&(j<=y)){
        if(v[i]<v[j]){
            aux[k++]=v[i];
            i++;
        }else{
            aux[k++]=v[j];
            j++;
        }
    }
    while(i<=b){
        aux[k++]=v[i];
        i++;
    }
    while(j<=y){
        aux[k++]=v[j];
        j++;
    }
    for(i=a, j=0; i<=y; i++, j++){
        v[i]=aux[j];
    }
}
void myMergeSort(int st, int dr){
    int m=(st+dr)/2;
    if(st<m){
        myMergeSort(st, m);
    }
    if(m+1<dr){
        myMergeSort(m+1, dr);
    }
    merge(st, m, m+1, dr);
}
int main(){
    int i, n;
    FILE *fin, *fout;
    fin=fopen("algsort.in", "r");
    fout=fopen("algsort.out", "w");
    fscanf(fin, "%d", &n);
    for(i=0; i<n; i++){
        fscanf(fin, "%d", &v[i]);
    }
    myMergeSort(0, n-1);
    for(i=0; i<n-1; i++){
        fprintf(fout, "%d ", v[i]);
    }
    fprintf(fout, "%d\n", v[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}