Cod sursa(job #600731)

Utilizator APOCALYPTODragos APOCALYPTO Data 2 iulie 2011 23:08:33
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
using namespace std;
#include<iostream>
#include<fstream>
#define nmax 500010
ofstream fout("algsort.out");
int N,a[nmax];
int d[nmax];

void merge(int l1,int r1,int l2,int r2)
{
    int i,j,k;
    for(i=l1,j=l2,k=1;i<=r1 && j<=r2;k++)
    {
        if(a[i]<a[j])
           d[k]=a[i],i++;
           else
           d[k]=a[j],j++;

    }
    for(;i<=r1;i++,k++)
    {
        d[k]=a[i];
    }
    for(;j<=r2;j++,k++)
    {
        d[k]=a[j];
    }
    k--;
    for(i=1;i<=k;i++)
    {
        a[l1-1+i]=d[i];
        //cout<<d[i]<<" ";
    }
   // cout<<"\n";
}

void sort(int l,int r)
{
    if(l==r)
       return;
    int m;
    m=(l+r)/2;
    sort(l,m);
    sort(m+1,r);
    /*cout<<l<<" "<<r<<":\n";
      for(int i=l;i<=r;i++)
      cout<<a[i]<<" ";
    cout<<"\n";*/
    merge(l,m,m+1,r);



}

void cit()
{
    int i;
    ifstream fin("algsort.in");
     fin>>N;
     for(i=1;i<=N;i++)
     {
         fin>>a[i];
     }
     /*for(i=1;i<=N;i++)
     {
         cout<<a[i]<<" ";

     }
     cout<<"\n";*/
    fin.close();
}

int main()
{
    cit();
    sort(1,N);
    int i;
    for(i=1;i<=N;i++)
      fout<<a[i]<<" ";
    fout<<"\n";
    fout.close();
    return 0;
}