Cod sursa(job #1506921)

Utilizator daneel95Holteiu Daniel-Ninel daneel95 Data 21 octombrie 2015 08:07:00
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

int n,a[500001],temp[500001];

void interclasare(int a[],int temp[],int s,int m,int d)
{
    int i=s;
    int st=s,dr=m+1;
    while(st<=m && dr<=d)
    {
        if(a[st]<=a[dr])
        {
            temp[i]=a[st];
            st++;
            i++;
        }else {
            temp[i]=a[dr];
            dr++;
            i++;
        }
    }
    while(st<=m)
    {
        temp[i]=a[st];
        st++;
        i++;
    }
    while(dr<=d)
    {
        temp[i]=a[dr];
        dr++;
        i++;
    }
    for(i=1;i<=d;i++) a[i]=temp[i];
    return;
}

void merge_sort(int a[],int temp[],int s,int d)
{
    if(s==d) return;
    int mij=(s+d)/2;
    merge_sort(a,temp,s,mij);
    merge_sort(a,temp,mij+1,d);

    interclasare(a,temp,s,mij,d);
    return;
}
int main()
{
    int i,n;
    in>>n;
    for(i=1;i<=n;i++) in>>a[i];

    merge_sort(a,temp,1,n);

    for(i=1;i<=n;i++) out<<a[i]<<" ";

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