Cod sursa(job #633763)

Utilizator PopaStefanPopa Stefan PopaStefan Data 14 noiembrie 2011 19:10:57
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<fstream>
#define nmax 500001

using namespace std;

unsigned int n,a[nmax];

void citire()
{
    ifstream fin("algsort.in");
    fin>>n;
    unsigned int i;
    for(i=0;i<n;i++)
        fin>>a[i];
    fin.close();
}

void afisare()
{
    ofstream fout("algsort.out");
    unsigned int i;
    for(i=0;i<n;i++)
        fout<<a[i]<<" ";
    fout.close();
}

void interclaseaza(unsigned int st,unsigned int mijl,unsigned int dr)
{
    unsigned int i,j,nr,b[nmax];
    for(i=st,j=mijl+1,nr=0;i<=mijl && j<=dr;nr++)
        if(a[i]<a[j])
        {
            b[nr]=a[i];
            i++;
        }
        else
        {
            b[nr]=a[j];
            j++;
        }
    while(i<=mijl)
    {
        b[nr]=a[i];
        i++;nr++;
    }
    while(j<=dr)
    {
        b[nr]=a[j];
        j++;nr++;
    }
    for(i=0;i<nr;i++)
        a[st+i]=b[i];
}

void sortare(unsigned int st,unsigned int dr)
{
    if(st<dr)
    {
        unsigned int mijl=(st+dr)/2;
        sortare(st,mijl);
        sortare(mijl+1,dr);
        interclaseaza(st,mijl,dr);
    }
}

int main()
{
    citire();
    if(n>=1)
        sortare(0,n-1);
    afisare();
    return 0;
}