Pagini recente » Cod sursa (job #154954) | Cod sursa (job #726431) | Cod sursa (job #1277422) | Cod sursa (job #907114) | Cod sursa (job #2059386)
#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;
}