Cod sursa(job #2694617)

Utilizator corina_dimitriuDimitriu Corina corina_dimitriu Data 9 ianuarie 2021 22:51:46
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#define DMAX 500005

using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");

int a[DMAX];
int temp[DMAX];
/*int main()
{int i,j,n,m,temp;
    fin>>n;
    m=0;
    for(i=0;i<n+m;i++)
        fin>>a[i];

    //i=n;
    for(i=1;i<n;i++)
    {
        j=i-1;
        temp=a[i];
        while(j>=0&&a[j]>temp)
             {
               a[j+1]=a[j];
               j=j-1;
             }
        a[j+1]=temp;
    }

    for(i=0;i<n+m;i++)
        fout<<a[i]<<' ';
    fout<<'\n';
    return 0;
}*/

 void divide(int p, int q);
 void impera(int p, int m, int q);
 int main()
{
    int i,n;
    fin>>n;
    for(i=0;i<n;i++)
        fin>>a[i];
    divide(0,n-1);
    for(i=0;i<n;i++)
        fout<<a[i]<<' ';
    fout<<'\n';
    return 0;
}

void divide(int p, int q)
{
    int m;
    m=(p+q)/2;
    if(p==q)
      {
        impera(p,m,q);
        return;
      }
    divide(p,m);
    divide(m+1,q);
    impera(p,m,q);
}

void impera(int p, int m, int q)
{
    int i,j,k=0;
    i=p;
    j=m+1;
    while(i<=m&&j<=q)
    {
        if(a[i]<a[j])
           temp[k++]=a[i++];
        else
           temp[k++]=a[j++];
    }
    while(i<=m)
         temp[k++]=a[i++];
    while(j<=q)
         temp[k++]=a[j++];
    for(i=p;i<=q;i++)
        a[i]=temp[i-p];
}