Cod sursa(job #1313286)

Utilizator priestnoobFMI - Dan Nema priestnoob Data 10 ianuarie 2015 15:16:45
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

#define nmax 500005

int n,v[nmax];

void citire()
{
    scanf("%d", &n);
    for(int i=1;i<=n;++i) scanf("%d", &v[i]);
}

void interclasare (int v[], int l, int r)
{
    int st=l;
    int t[nmax],k=1;
    int mijl=l+(r-l)/2;
    int i=l,j=mijl+1;
    while(i<=mijl&&j<=r)
    {
        if(v[i]<v[j]) t[k]=v[i], i++, k++;
        else t[k]=v[j], j++, k++;
    }
    if(i>mijl) for(;j<=r;++j,++k) t[k]=v[j];
    else for(;i<=mijl;++i,++k) t[k]=v[i];
    k--;
    for(int i=1;i<=k;++i,++st)
       v[st]=t[i];
}

void mergesort(int v[], int l, int r)
{
    if(r>l){
        mergesort(v,l,l+(r-l)/2);
        mergesort(v,l+(r-l)/2+1,r);
    interclasare(v,l,r);}
}

void afisare(){
    for(int i=1;i<=n;++i) printf("%d ",v[i]);}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    citire();
    mergesort(v,1,n);
    afisare();
}