Pagini recente » Cod sursa (job #536654) | Cod sursa (job #1107357) | Cod sursa (job #2311458) | Cod sursa (job #2280382) | Cod sursa (job #1108788)
#include <fstream>
using namespace std;
ifstream in ( "algsort.in" ) ;
ofstream out ( "algsort.out" ) ;
int n , i , vect[500005] , temp[500005] ;
void merge ( int left_1 , int right_1 , int left_2 , int right_2 )
{
int pos_1 = left_1 ; int pos_2 = left_2 ; int nr = left_1 ;
while ( pos_1 <= right_1 && pos_2 <= right_2 )
{
if ( vect[pos_1] < vect[pos_2] ) { temp[nr] = vect[pos_1] ; pos_1 ++ ; }
else { temp[nr] = vect[pos_2] ; pos_2 ++ ; }
nr ++ ;
}
while ( pos_1 <= right_1 ) { temp[nr] = vect[pos_1] ; pos_1 ++ ; nr ++ ; }
while ( pos_2 <= right_2 ) { temp[nr] = vect[pos_2] ; pos_2 ++ ; nr ++ ; }
for ( i = left_1 ; i <= right_2 ; i ++ )
{
vect[i] = temp[i] ;
}
}
void merge_sort ( int left , int right )
{
int middle ;
if ( left == right ) { return; }
middle = ( left + right ) / 2 ;
merge_sort ( left , middle ) ;
merge_sort ( middle + 1 , right ) ;
merge ( left , middle , middle + 1 , right ) ;
}
int main()
{
in >> n ;
for ( i = 1 ; i <= n ; i ++ )
{
in >> vect[i] ;
}
merge_sort ( 1 , n ) ;
for ( i = 1 ; i <= n ; i ++ )
{
out << vect[i] << " " ;
}
return 0;
}