Cod sursa(job #1333049)

Utilizator TeodorescuStefanEduardTeodorescu Stefan Eduard TeodorescuStefanEduard Data 2 februarie 2015 18:41:31
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<iostream>
#include<fstream>

using namespace std;
fstream in("algsort.in",ios::in);
fstream out("algsort.out",ios::out);

void mrgsort(int*,int);
void sparge(int*,int,int);
void imbina(int*,int*,int,int,int);

int main()
{
    int a[500000],n,i;
    in>>n;
    for(i=0;i<n;i++)
        in>>a[i];
    mrgsort(a,n);
    for(i=0;i<n;i++)
        out<<a[i]<<" ";

    in.close();
    out.close();
    return 0;
}

void mrgsort(int a[],int n)
{
    sparge(a,0,n);
}

void sparge(int a[],int down,int up)
{
    int b[up-down+2];
    int mid;
    if((up-down)<2)
        return ;
    mid=down+(up-down)/2;
    sparge(a,down,mid);
    sparge(a,mid,up);
    imbina(a,b,down,mid,up);
    for(int i=down;i<up;i++)
        a[i]=b[i];
}

void imbina(int a[],int b[],int down,int mid,int up)
{

    int idown=down;
    int imid=mid;
    for(int i=down;i<up;i++)
        if(idown<mid&&(imid>=up||a[idown]<a[imid]))
        {
            b[i]=a[idown];
            idown++;
        }
        else
        {
            b[i]=a[imid];
            imid++;
        }
}