Pagini recente » Cod sursa (job #2051176) | Cod sursa (job #154795) | Cod sursa (job #1937784) | Cod sursa (job #477956) | Cod sursa (job #2674098)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int MAXN = 500000;
int v[MAXN];
void mergev( int v[], int left, int mid, int right ){
int n1 = mid - left + 1;
int n2 = right - mid;
int l[n1];
int r[n2];
int i, j, k;
for ( i = 0; i < n1; i++)
l[i] = v[ left + i ];
for ( j = 0; j < n2; j++)
r[j] = v[ mid + 1 + j ];
i = 0;
j = 0;
k = left;
while( i < n1 && j < n2 ){
if( l[i] <= r[j] ){
v[k] = l[i];
i++;
}
else{
v[k] = r[j];
j++;
}
k++;
}
while( i < n1 ){
v[k] = l[i];
k++;
i++;
}
while( j < n2 ){
v[k] = r[j];
k++;
j++;
}
}
void mergesort(int v[], int left, int right ){
if( left >= right )
return;
int mid = ( right + left ) / 2;
mergesort( v, left, mid );
mergesort( v, mid + 1, right );
mergev( v, left, mid, right );
}
void quicksort( int inf, int sup ){
int i, j, x, t;
i = inf;
j = sup;
x = v[ ( i + j ) / 2 ];
while( i <= j ){
while( ( i < sup ) && ( v[i] < x ) )i++;
while( ( j > inf ) && ( v[j] > x ) )j--;
if( i <= j ){
t = v[i];
v[i] = v[j];
v[j] = t;
i++;
j--;
}
}
if( j > inf ) quicksort( inf, j );
if( i <sup ) quicksort( i, sup );
}
int main()
{
int n, i;
in>>n;
for( i = 0; i < n; i++ )
in>>v[i];
quicksort( 0, n - 1 );
//mergesort( v, 0, n - 1 );
//sort( v, v + n );
for( i = 0; i < n; i++ )
out<<v[i]<<" ";
return 0;
}