Pagini recente » Cod sursa (job #1322670) | Cod sursa (job #2611528) | Cod sursa (job #1485481) | Cod sursa (job #2724872) | Cod sursa (job #2059392)
/*#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;
}