Cod sursa(job #1684824)

Utilizator AcuasPopescu Nicolae-Aurelian Acuas Data 11 aprilie 2016 12:19:55
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
void citire(int &n,int x[]){
    cin>>n;
    int i;
    for(i=1;i<=n;i++)
        cin>>x[i];
}
void afisare(int n,int x[]){
    int i;
    for(i=1;i<=n;i++)
        cout<<x[i]<<' ';
}
void Merge(int n,int x[],int li,int ls,int mij){
    int i,j,n1=mij-li+1,n2=ls-mij;
    int a[500005],b[500005];
    for(i=1;i<=n1;i++)
        a[i]=x[li+i-1];
    for(i=1;i<=n2;i++)
        b[i]=x[mij+i];
    i=j=1;
    int k=li;
    while(i<=n1&&j<=n2)
        if(a[i]<=b[j])
            x[k++]=a[i++];
        else
            x[k++]=b[j++];
    while(i<=n1)
        x[k++]=a[i++];
    while(j<=n2)
        x[k++]=b[j++];
}
void MergeSort(int n,int x[],int li,int ls){
    if(li<ls){
        int mij=(li+ls)/2;
        MergeSort(n,x,li,mij);
        MergeSort(n,x,mij+1,ls);
        Merge(n,x,li,ls,mij);
    }
}
int main(){
    int n,v[500005];
    citire(n,v);
    MergeSort(n,v,1,n);
    afisare(n,v);
    return 0;
}