Cod sursa(job #1399511)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 24 martie 2015 19:47:04
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

#define DN 500005
using namespace std;

int v[DN],n;
int tmp[DN];


void read(){

    ifstream f("algsort.in");
    f>>n;
    for(int i=1;i<=n;++i)
        f>>v[i];
}


void usort(int v[],int left,int right){

    int mij = (left+right)/2;

    if(left == right)
        return;

    usort(v,left,mij);
    usort(v,mij+1,right);

    tmp[0] = 0;

    int ii = left,jj = mij+1;
    while( ii <= mij and jj <= right){

        if(v[ii] <= v[jj])
            tmp[++tmp[0]] = v[ii++];
        else
            tmp[++tmp[0]] = v[jj++];
    }
    while( ii <= mij) tmp[++tmp[0]] = v[ii++];
    while( jj <= right) tmp[++tmp[0]] = v[jj++];

    /*cout<<"L:"<<left<<" | R:"<<right<<" | Mij:"<<mij<<endl;
    for(int i=1;i<=tmp[0];++i)
        cout<<tmp[i]<<" " ;*/
    for(int i=1;i<=tmp[0];++i)
        v[ left + i - 1 ] = tmp[i];
}

void uprint(){

    ofstream g("algsort.out");
    for(int i=1;i<=n;++i)
        g<<v[i]<<" ";
}

int main()
{
    read();
    usort(v,1,n);
    uprint();

    return 0;
}