Cod sursa(job #1484439)

Utilizator dareare14Daria Petca dareare14 Data 11 septembrie 2015 10:59:23
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream F("algsort.in");
ofstream G("algsort.out");

const int N=500010;
int a[N],n,v[N],k;

void mergesort(int l,int r)
{
    if ( r-l+1==1 ) // l == r
        return ;
    int m=(l+r)/2;
    mergesort(l,m);
    mergesort(m+1,r);
    k=0;
    int i=l;
    int j=m+1;
    /**
    while ( i <= m || j <= r )
    {
        if ( i > m )
            v[++k] = a[j++];
        else
            ...
        else
            if ( a[i] == a[j] )
                v[++k] = a[i++] , v[++k] = a[j++];
    }
    */
    while ( i<=m || j<=r )
    {
        if ( i>m )
        {
           k++;
           v[k]=a[j];
           j++;
        }
        else
            if ( j>r )
        {
            k++;
            v[k]=a[i];
            i++;
        }
        else
        if ( a[i]>a[j] )
        {
            k++;
            v[k]=a[j];
            j++;
        }
        else
            if ( a[i]<a[j] )
        {
            k++;
            v[k]=a[i];
            i++;
        }
        else
            if ( a[i]==a[j] )
        {
            k++;
            v[k]=a[i];
            k++;
            v[k]=a[j];
            i++;j++;
        }
    }
    for (int i=1;i<=k;++i)
        a[l+i-1] = v[i];
}

int main()
{
    F>>n;
    for (int i=1;i<=n;i++ )
        F>>a[i];
    mergesort(1,n);
    for (int i=1;i<=n;i++ )
        G<<a[i]<<' ';
}