Pagini recente » Diferente pentru home intre reviziile 82 si 81 | Cod sursa (job #1490376) | Cod sursa (job #174750) | Cod sursa (job #780879) | Cod sursa (job #1092166)
#include <fstream>
using namespace std;
const int N = 5e5;
int v[N], n;
ifstream in("algsort.in");
ofstream out("algsort.out");
void bitsort(int st, int dr, int M){
if (!M || dr <= st)
return;
int i = st, j = dr;
while (i < j){
while ( i < j && (v[i] & M) == 0 ) i++;
while ( i < j && v[j] & M ) j--;
if (i < j) swap(v[i], v[j]);
}
M >>= 1;
bitsort(st, j - 1, M);
bitsort(j, dr, M);
}
int main(){
in >> n;
for (int i = 0 ; i < n ; i++)
in >> v[i];
bitsort(0, n - 1, 1 << 2);
for (int i = 0 ; i < n ; i++)
out << v[i] << " ";
out << "\n";
return 0;
}