Cod sursa(job #1146986)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 19 martie 2014 14:44:23
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>
int v[500000], aux[500000];
void merge(int st, int m, int dr){
    int k, i, j;
    k=st;
    i=st;
    j=m;
    while((i<m)&&(j<dr)){
        if(v[i]<v[j]){
            aux[k++]=v[i++];
        }else{
            aux[k++]=v[j++];
        }
    }
    while(i<m){
        aux[k++]=v[i++];
    }
    while(j<dr){
        aux[k++]=v[j++];
    }
    for(i=st; i<dr; i++){
        v[i]=aux[i];
    }
}
void mergeSort(int st, int dr){
    int m;
    if(st>=dr){
        return ;
    }
    m=st+((dr-st+1)>>1);
    mergeSort(st, m-1);
    mergeSort(m, dr);
    merge(st, m, dr+1);
}
int main(){
    int n, i;
    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]);
    }
    mergeSort(0, n-1);
    for(i=0; i<n; i++){
        fprintf(fout, "%d ", v[i]);
    }
    fprintf(fout, "\n");
    fclose(fin);
    fclose(fout);
    return 0;
}