Cod sursa(job #2215856)

Utilizator Horia14Horia Banciu Horia14 Data 23 iunie 2018 22:11:57
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<cstdio>
#define MAX_N 500000
using namespace std;

int v[MAX_N], aux[MAX_N], n;

void read() {
    FILE* fin = fopen("algsort.in","r");
    fscanf(fin,"%d",&n);
    for(int i = 0; i < n; i++)
        fscanf(fin,"%d",&v[i]);
    fclose(fin);
}

void mergeSort(int Begin, int End) {
    int i, j, mid, k;
    if(Begin < End) {
        mid = (Begin + End) >> 1;
        mergeSort(Begin,mid);
        mergeSort(mid+1,End);
        i = Begin;
        j = mid + 1;
        k = 0;
        while(i <= mid && j <= End) {
            if(v[i] <= v[j])
                aux[k++] = v[i++];
            else aux[k++] = v[j++];
        }
        while(i <= mid)
            aux[k++] = v[i++];
        while(j <= End)
            aux[k++] = v[j++];
        for(i = Begin; i <= End; i++)
            v[i] = aux[i-Begin];
    }
}

void write() {
    FILE* fout = fopen("algsort.out","w");
    for(int i = 0; i < n; i++)
        fprintf(fout,"%d ",v[i]);
    fprintf(fout,"\n");
    fclose(fout);
}

int main() {
    read();
    mergeSort(0,n-1);
    write();
    return 0;
}