Cod sursa(job #608327)

Utilizator proflaurianPanaete Adrian proflaurian Data 16 august 2011 12:36:18
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#include<deque>
using namespace std;
int n,i,j,k,A[1<<19],B[1<<19],*a,*b,*c,LO,MI,HI,lo,mi,hi;

int main()
{
    freopen("algosort.in","r",stdin);
    freopen("algosort.out","w",stdout);
    scanf("%d",&n);
    for(i=0;i<n;i++)scanf("%d",&A[i]);
    a=A,b=B;
    for(HI=2,MI=1;MI<n;HI<<=1,MI<<=1)
    {
        for(lo=0,mi=MI,hi=HI;lo<n;lo+=HI,mi+=HI,hi+=HI)
        {
            if(mi>n)
            {
                for(i=lo;i<n;i++)b[i]=a[i];
                break;
            }
            if(hi>=n)hi=n;
            for(k=lo,i=lo,j=mi;i<mi&&j<hi;)
            {
                if(a[i]<a[j]){b[k++]=a[i++];continue;}
                if(a[i]>a[j]){b[k++]=a[j++];continue;}
                b[k++]=a[i++];b[k++]=a[j++];
            }
            for(;i<mi;)b[k++]=a[i++];
            for(;j<hi;)b[k++]=a[j++];
        }
        c=a;a=b;b=c;
    }
    for(i=0;i<n;i++)printf("%d ",a[i]);
    return 0;
}