Cod sursa(job #1397614)

Utilizator andreib98Borza Andrei andreib98 Data 23 martie 2015 17:04:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
long long int n,a[500001],i;
void merger(int p,int m,int r)
{
    int i,j,k=p,b[500001];
    for(i=p,j=m+1;i<=m||j<=r;)
    {
        if(a[i]<a[j]&&i<=m&&j<=r)
        {
            b[k]=a[i];
            k++;
            i++;
        }
        else if(a[i]>a[j]&&i<=m&&j<=r)
        {
            b[k]=a[j];
            k++;
            j++;
        }
        else if(i>m&&j<=r)
        {
            b[k]=a[j];
            j++;
            k++;
        }
        else if(j>r&&i<=m)
        {
            b[k]=a[i];
            i++;
            k++;
        }
        else if(a[i]==a[j])
        {
            b[k]=a[i];
            k++;
            b[k]=a[j];
            k++;
            i++;
            j++;
        }
    }
    for(i=p;i<=r;i++)
        a[i]=b[i];
};
int mergeSort(int p,int r)
{
   int m,i,j;
   if(p>=r) return a[r];
   else
   {
        m=(p+r)/2;
        mergeSort(p,m);
        mergeSort(m+1,r);
        merger(p,m,r);
   }
};
int main()
{
fin>>n;
for(i=1;i<=n;i++)
    fin>>a[i];
mergeSort(1,n);
for(i=1;i<=n;i++)
    fout<<a[i]<<" ";
    return 0;
}