Cod sursa(job #2061002)

Utilizator Horia14Horia Banciu Horia14 Data 8 noiembrie 2017 20:52:19
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<cstdio>
#define MAX_N 500000
using namespace std;

int v[MAX_N], n;

void Merge(int left, int mid, int right) {
    int i = left, j = mid+1, k = 0;
    int b[MAX_N];
    while(i <= mid && j <= right) {
        if(v[i] <= v[j])
            b[k++] = v[i++];
        else b[k++] = v[j++];
    }
    while(i <= mid)
        b[k++] = v[i++];
    while(j <= right)
        b[k++] = v[j++];
    for(i=left; i<=right; i++)
        v[i] = b[i-left];
}

void mergeSort(int left, int right) {
    if(right > left) {
        int mid = (left + right) >> 1;
        mergeSort(left,mid);
        mergeSort(mid+1,right);
        Merge(left,mid,right);
    }
}

int main() {
    FILE *fin, *fout;
    fin = fopen("algsort.in","r");
    fout = fopen("algsort.out","w");
    fscanf(fin,"%d",&n);
    for(int i=0; i<n; i++)
        fscanf(fin,"%d",&v[i]);
    fclose(fin);
    mergeSort(0,n-1);
    for(int i=0; i<n; i++)
        fprintf(fout,"%d ",v[i]);
    fprintf(fout,"\n");
    fclose(fout);
    return 0;
}