Cod sursa(job #1499580)

Utilizator mihai.constantinConstantin Mihai mihai.constantin Data 10 octombrie 2015 20:26:04
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <cstdio>
using namespace std;

FILE *in, *out;

const int dmax = 500000;

int v[dmax+1], r[dmax+1]; int N;

void Inter(int st, int dr)
{
    int i,j,k,m;

    i = k = st; m = (st+dr)/2; j = m+1;

    while(i <= m && j <= dr)
        if(v[i] <= v[j]) r[k++] = v[i++];
            else
                r[k++] = v[j++];

    while(i <= m)
            r[k++] = v[i++];

    while(j <= dr)
        r[k++] = v[j++];

    //COPIEM IN v

    for(i = st; i <= dr; i++)
        v[i] = r[i];
}

void Merge_Sort(int st, int dr)
{
    if(st == dr) return;

    int m = (st+dr)/2;

    Merge_Sort(st,m);
    Merge_Sort(m+1,dr);

    Inter(st,dr);
}

int main()
{
    in = fopen("algsort.in", "r");
    out = fopen("algsort.out", "w");

    fscanf(in, "%d", &N);
    for(int i=1; i<=N; i++)
        fscanf(in, "%d", &v[i]);

    Merge_Sort(1,N);

    for(int i = 1; i <= N; i++)
        fprintf(out, "%d ", v[i]);

    return 0;
}