Cod sursa(job #1550032)

Utilizator alexandru.rusuRusu Alexandru alexandru.rusu Data 13 decembrie 2015 02:20:13
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int n;
int x[500003];
int b[500003];

void Inter(int p, int m, int u)
{
    int k1=p, k2=m+1, k3=p;
    while(k1<=m && k2<=u)
    {
        if(x[k1]<x[k2])
        {
            b[k3]=x[k1];
            k1++;
        }
        else
        {
            b[k3]=x[k2];
            k2++;
        }
        k3++;
    }
    if(k1>m)
        for(int k=k2;k<=u;k++)
        {
            b[k3]=x[k];
            k3++;
        }
    else
        for(int k=k1;k<=m;k++)
        {
            b[k3]=x[k];
            k3++;
        }

    for(int i=p;i<=u;i++)
    {
        x[i]=b[i];
    }
}

void InsertSort(int p, int u)
{
    for(int i=p;i<u;i++)
    {
        for(int j=i+1;j<=u;j++)
        {
            if(x[i]>x[j])
            {
                int aux=x[i];
                x[i]=x[j];
                x[j]=aux;
            }
        }
    }
}
void MergeSort(int p, int u)
{
    if(u-p<=11) { InsertSort(p,u); }
    else
    {
        int k=(p+u)/2;
        MergeSort(p,k);
        MergeSort(k+1,u);
        Inter(p,k,u);
    }
}

int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>x[i];
    MergeSort(1,n);
    for(int i=1;i<=n;i++)
    {
        g<<x[i]<<' ';
    }
    return 0;
}