Pagini recente » Cod sursa (job #1239942) | Cod sursa (job #1578888) | Borderou de evaluare (job #3332171) | Cod sursa (job #3341739) | Cod sursa (job #3327498)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 500000
int vec[NMAX + 1];
ifstream fin ( "algsort.in" );
ofstream fout ( "algsort.out" );
void my_swap( int &a, int &b ) {
int aux;
aux = a;
a = b;
b = aux;
}
void sortare ( int vec[], int left, int right, int bitnumber ) {
if ( left >= right || bitnumber == -1 )
return;
int ind_i, ind_j;
ind_j = left;
for ( ind_i = left; ind_i <= right; ind_i++ ) {
if ( (vec[ind_i] & ( 1 << bitnumber )) == 0 ) {
my_swap( vec[ind_i], vec[ind_j] );
ind_j++;
}
}
sortare ( vec, left, ind_j - 1, bitnumber - 1 );
sortare ( vec, ind_j, right, bitnumber - 1 );
}
int main()
{
int num_n, ind;
fin >> num_n;
for ( ind = 0; ind < num_n; ind++ )
fin >> vec[ind];
sortare ( vec, 0, num_n - 1, 30 );
for ( ind = 0 ; ind < num_n; ind++ )
fout << vec[ind] << " ";
return 0;
}