Cod sursa(job #1745304)

Utilizator Horia14Horia Banciu Horia14 Data 21 august 2016 16:56:36
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<cstdio>
#define NMax 500000
using namespace std;

unsigned a[NMax], n;

void Citire()
{
    FILE *fin = fopen("algsort.in","r");
    fscanf(fin,"%u",&n);
    for(unsigned i=0; i<n; i++)
        fscanf(fin,"%u",&a[i]);
    fclose(fin);
}

void Merge(unsigned p, unsigned m, unsigned q)
{
    unsigned i = p, j = m+1, k = 0;
    unsigned b[NMax];
    while(i <= m && j <= q)
        if(a[i] < a[j]) b[k++] = a[i++];
        else b[k++] = a[j++];
    while(i <= m) b[k++] = a[i++];
    while(j <= q) b[k++] = a[j++];
    for(i=p; i<=q; i++)
        a[i] = b[i-p];
}

void Merge_Sort(unsigned p, unsigned q)
{
    if(q > p)
    {
        unsigned m = (p+q)/2;
        Merge_Sort(p, m);
        Merge_Sort(m+1, q);
        Merge(p, m, q);
    }
}

int main()
{
    FILE *fout = fopen("algsort.out","w");
    Citire();
    Merge_Sort(0, n-1);
    for(unsigned i=0; i<n; i++)
        fprintf(fout, "%u ",a[i]);
    fclose(fout);
    return 0;
}