Cod sursa(job #1833850)

Utilizator alindima99Alin Dima alindima99 Data 23 decembrie 2016 13:11:59
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;

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

void interclasare(long v[], long a, long m, long b)
{
    long i=a,j=m+1,k=0,r[b-a+1],t;

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

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

    for(t=j;t<=b;t++)
        r[++k]=v[j++];

    k=1;
    for(t=a;t<=b;t++)
        v[t]=r[k++];
}

void merge_sort(long v[], long st, long dr)
{
    long m=(dr+st)/2;

    if(st<dr){
        merge_sort(v,st,m);
        merge_sort(v,m+1,dr);
        interclasare(v,st,m,dr);
    }
}

int main()
{
    long n,i;

    cin>>n;
    long v[n];

    for(i=1;i<=n;i++)
        cin>>v[i];

    merge_sort(v,1,n);

    for(i=1;i<=n;i++)
        cout<<v[i]<<" ";

    return 0;
}