Cod sursa(job #1652299)

Utilizator NecoaraGabrielNecoara Gabriel-Stefan NecoaraGabriel Data 14 martie 2016 21:00:05
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb

#include<iostream>
#include<fstream>
#include <limits>

using namespace std;


int int_max = std::numeric_limits<int>::max();

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

void MERGE(int a[],int p,int mid,int q)
{
    int i,j,n1,n2;
    cout<<"Entered merge"<<endl;
    n1=mid-p+1;
    n2=q-mid;

    int L[n1+1],R[n2+1];

    for(i=1;i<=n1;i++)
        L[i]=a[p+i-1];
    for(j=1;j<=n2;j++)
        R[j]=a[mid+j];

  L[n1+1]=int_max;
  R[n2+1]=int_max;
    i=j=1;

    for(int k=p;k<=q;k++)
        if(L[i]<=R[j])
            {
            a[k]=L[i];
            i++;
            }
        else{a[k]=R[j];
            j++;
        }

}

void merge_sort(int a[],int p,int q)
{int mid;
    if(p<q)
    {
        mid=(p+q)/2;
        merge_sort(a,p,mid);
        merge_sort(a,mid+1,q);
        MERGE(a,p,mid,q);
    }
}

void afisare(int a[],int n)
{
    cout<<endl;
    for(int i=1;i<=n;i++)
    //cout<<a[i]<<" ";
    g<<a[i]<<" ";
}
int main()
{
    int n,i;

//cout<<int_max;
f>>n;

int x[n];

for(i=1;i<=n;i++)
    f>>x[i];

    //afisare(x,n);
    merge_sort(x,1,n);

afisare(x,n);

    return 0;
}