Cod sursa(job #330224)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 9 iulie 2009 10:20:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<cstdio>

using namespace std;
int n,a[500001];

void merge(int a1,int ab,int b)
{int l[250001],r[250001];
 for(int i=1;i<=ab-a1+1;i++)
  l[i]=a[i+a1-1];
 for(int j=1;j<=b-ab;j++)
  r[j]=a[j+ab];
 int k1=1,k2=1;
 int piv=a1;
 while(k1<=(ab-a1+1) && k2<=(b-ab))
   {if(l[k1]<=r[k2]) {a[piv]=l[k1];k1++;}
    else {a[piv]=r[k2];k2++;}
    piv++;}
if(k1<=ab-a1+1) while(k1<=ab-a1+1)  {a[piv]=l[k1];k1++;piv++;}
else if(k2<=(b-ab)) {a[piv]=r[k2];k2++;piv++;}   
     } 


void mergesort(int in,int sf)
{if(in<sf)
 {int mij=(in+sf)/2;
 mergesort(in,mij);
 mergesort(mij+1,sf);
 merge(in,mij,sf);}}




int main()
{int i1;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);

for(i1=1;i1<=n;i1++)
{scanf("%d",&a[i1]);}
mergesort(1,n);
for(i1=1;i1<=n;i1++)
 printf("%d ",a[i1]);
return 0;    
    
    }