Pagini recente » Cod sursa (job #2774373) | Cod sursa (job #361980) | Cod sursa (job #1412901) | Cod sursa (job #348371) | Cod sursa (job #1835096)
#include <fstream>
using namespace std ;
const int MAX = 500002 ;
int v [ MAX ] ;
ifstream cin ( "algsort.in" ) ;
ofstream cout ("algsort.out") ;
int aux [ MAX ] ;
void Interclasare ( int a , int b , int c , int d )
{
int start = a ;
int cate = 0 ;
while ( a <= b and c <= d ) {
if ( v [ a ] < v [ c ] ) {
++ cate ;
aux [ cate ] = v [ a ] ;
++ a ;
}
else {
++ cate ;
aux [ cate ] = v [ c ] ;
++ c ;
}
}
while ( a <= b ) {
++ cate ;
aux [ cate ] = v [ a ] ;
++ a ;
}
while ( c <= d ) {
++ cate ;
aux [ cate ] = v [ c ] ;
++ c ;
}
for ( int i = 1 ; i <= cate ; ++ i ) {
v [ start + i - 1 ] = aux [ i ] ;
}
}
void SortMerge ( int st, int dr )
{
if ( st == dr ) {
return ;
}
if ( st + 1 == dr ) {
if ( v [ st ] > v [ dr ] ) {
swap ( v [ st ] , v [ dr ] ) ;
}
return ;
}
int mij = ( st + dr ) / 2 ;
SortMerge ( st , mij ) ;
SortMerge ( mij + 1 , dr ) ;
Interclasare ( st , mij , mij + 1 , dr ) ;
}
int main ( )
{
int n ;
cin >> n ;
for ( int i = 1 ; i <= n ; ++ i ) {
cin >> v [ i ] ;
}
SortMerge ( 1 , n ) ;
for ( int i = 1 ; i <= n ; ++ i ) {
cout << v [ i ] << ' ' ;
}
return 0 ;
}