Cod sursa(job #2059392)

Utilizator narcischitescuNarcis Chitescu narcischitescu Data 6 noiembrie 2017 22:27:07
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.29 kb
/*#include <fstream>
#include <iostream>

using namespace std;

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

int v[500001],n;

void gnome ()
{
    int poz = 1;
    while ( poz <= n )
    {
        if ( poz == 1 or v[poz] >= v[poz-1]) poz++;
        else
        {
            swap(v[poz],v[poz-1]);
            poz--;
        }
    }
}

int i;
int main()
{
    f >> n;
    for ( i = 1; i <= n ; ++i )
        f >> v[i];
    gnome();
    for ( i = 1; i <= n; ++i )
        g << v[i] << " " ;
    return 0;
}
*/
//#include <stdio.h>
#include <fstream>
//#include <stdlib.h>

using namespace std;

#define NMAX 500001

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

    int dim_V , Vector[NMAX] , index ;

void interclasare(int V[NMAX], int p , int r , int q )
{
    int A[NMAX] , B[NMAX] , C[NMAX] ,  index , indexA, indexB , indexC ;
    for ( index = p ; index <= r ; index++ )
        A[index-p] = V[index];
    for ( index = r+1 ; index <= q ; index++ )
        B[index-r-1] = V[index];
    indexA = 0;
    indexB = 0;
    indexC = 0;
    while( indexA <= r-p && indexB < q-r )
    {
        if(A[indexA] < B[indexB]) C[indexC++] = A[indexA++];
        else                      C[indexC++] = B[indexB++];
    }
    while(indexA <= r-p) C[indexC++] = A[indexA++];
    while(indexB < q-r) C[indexC++] = B[indexB++];

  /*  if (( q-p == 1 ) && (C[0] > C[1]))
    {
        int aux = C[0];
        C[0] = C[1];
        C[1] = aux;
    }
    */

    for ( index = p ; index <= q ; index++ )
        V[index] = C[index-p];
}

 void mergesort(int V[NMAX], int p , int q )
 {
     if ( p >= q ) return;
     int r;
     r = (p+q)/2;
     mergesort(V,p,r);
     mergesort(V,r+1,q);
     interclasare(V,p,r,q);
 }

 void afisare( int V[] , int dim_V )
 {
     int index;
     for ( index = 0 ; index < dim_V ; index++ )
       // printf("%d ", V[index] ) ;
       g << V[index] << " " ;
 }


int main()
{
   // freopen("algsort.in","r",stdin);
   // freopen("algsort.out","w",stdout);

   // scanf("%d" , &dim_V) ;
   f >> dim_V;
    for ( index = 0 ; index < dim_V ; index++ )
       // scanf("%d" , &Vector[index]) ;
       f >> Vector[index];

   mergesort(Vector,0,dim_V-1);

    afisare(Vector,dim_V);

    return 0;
}