Cod sursa(job #1457322)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 3 iulie 2015 10:23:32
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include <cstdio>
#include <algorithm>
#define NMAX 500007
FILE *fin, *fout;
using namespace std;
int n, a[NMAX],b[NMAX];
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 msort(int s,int e)
{
     if(e-s+1>=3)
     {
                 int mij=(s+e)/2;
                 msort(s,mij);
                 msort(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(a[i],a[j]);
         }
     }
}
int main()
{
    fin = freopen ("algsort.in","r",stdin);
    fout = freopen ("algsort.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    msort(1,n);
    for(int i=1;i<=n;i++) printf("%d ",a[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}