Cod sursa(job #1073357)

Utilizator NitaMihaitavoidcube NitaMihaita Data 6 ianuarie 2014 02:25:48
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
#define nmax 500001
using namespace std;
int v[nmax],w[nmax];
void sort2(int p,int q)
{
    int i,x,j;
    for(i=p+1;i<=q;++i)
    {
        for(x=v[i],j=i-1;x<v[j] && j>p-1;v[j+1]=v[j],--j);
        v[j+1]=x;
    }
}
void Ordoneaza(int s,int d)
{
    if(s==d) return ;
    int i=s,m=(s+d)>>1,j=m+1,k=s;
    if(d-s+1>=10)sort2(s,d);
    else
    {
        Ordoneaza(s,m);
        Ordoneaza(m+1,d);
        for(;i<=m || j<=d;)
            if(j>d || (i<=m && v[i]<v[j]))
                w[k++]=v[i++];
            else w[k++]=v[j++];
        for(k=s;k<=d;++k)
            v[k]=w[k];
    }
}
int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    int n,i;
    f>>n;
    for(i=1;i<=n;++i)
        f>>v[i];
    Ordoneaza(1,n);
    for(i=1;i<=n;++i)
        g<<v[i]<<" ";
    g<<"\n";
    f.close();
    g.close();
    return 0;
}