Cod sursa(job #1435743)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 14 mai 2015 12:23:32
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <cstdio>
int n;
int a[500001],b[500001];
void swap(int i1,int i2)
{
     int temp=a[i1];
     a[i1]=a[i2];
     a[i2]=temp;
}
void interclas(int i1,int i2,int i3,int i4)
{
     int pos=1,temp=i1;
     i2++;
     i4++;
     while(1)
     {
             if(i1==i2&&i3==i4) break;
             if(i2==i1)
             {
                       b[pos]=a[i3];
                       i3++;
                       pos++;
             }
             else if(i3==i4)
             {
                  b[pos]=a[i1];
                  i1++;
                  pos++;
             }
             else if(a[i1]<a[i3])
             {
                  b[pos]=a[i1];
                  i1++;
                  pos++;
             }
             else if(a[i3]<=a[i1])
             {
                 b[pos]=a[i3];
                 i3++;
                 pos++;
             }
     }
     for(int i=temp;i<i4;i++)
     {
             a[i]=b[i-temp+1];
     }
}
void sort(int s,int e)
{
     if(e-s+1>=3)
     {
                 int mij=(s+e)/2;
                 sort(s,mij);
                 sort(mij+1,e);
                 interclas(s,mij,mij+1,e);
     }
     else
     {
         for(int i=s;i<e;i++)
         {
                 for(int j=i+1;j<=e;j++) if(a[i]>a[j]) swap(i,j);
         }
     }
}
int main()
{
    freopen ("algsort.in","r",stdin);
    freopen ("algsort.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    sort(1,n);
    for(int i=1;i<=n;i++) printf("%d ",a[i]);
}