Cod sursa(job #2059386)

Utilizator narcischitescuNarcis Chitescu narcischitescu Data 6 noiembrie 2017 22:17:09
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.56 kb
#include <stdio.h>
#include <stdlib.h>

#define NMAX 500001

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] ) ;
 }

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int dim_V , Vector[NMAX] , index ;
    scanf("%d" , &dim_V) ;
    for ( index = 0 ; index < dim_V ; index++ )
        scanf("%d" , &Vector[index]) ;

    mergesort(Vector,0,dim_V-1);
    afisare(Vector,dim_V);

    return 0;
}