Pagini recente » Cod sursa (job #3191799) | Cod sursa (job #2528068) | Cod sursa (job #63220) | Cod sursa (job #1544870) | Cod sursa (job #3124589)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int N_MAX = 5e5;
const int BIT_MAX = 30;
int v[N_MAX];
void RadixSort(int v[], int begin, int end, int bit) {//MSD
if(end <= begin || bit < 0)
return;
int b = begin, e = end;
while(b < end && (v[b] & (1 << bit)) == 0)
++b;
while(e > begin && (v[e] & (1 << bit)) > 0)
--e;
while(b < e){
int aux = v[b];
v[b] = v[e];
v[e] = aux;
do
++b;
while(b < end && (v[b] & (1 << bit)) == 0);
do
--e;
while(e > begin && (v[e] & (1 << bit)) > 0);
}
b = begin;
while(b <= end && (v[b] & (1 << bit)) == 0)
++b;
RadixSort(v, begin, e, bit - 1);
RadixSort(v, e + 1, end, bit - 1);
}
int main() {
int n;
fin >> n;
for(int i = 0; i < n; ++i)
fin >> v[i];
RadixSort(v, 0, n - 1, BIT_MAX);
for(int i = 0; i < n; ++i)
fout << v[i] << ' ';
fout.put('\n');
fin.close();
fout.close();
return 0;
}