Pagini recente » Cod sursa (job #2312811) | Cod sursa (job #2491201) | Cod sursa (job #728016) | Cod sursa (job #2340027) | Cod sursa (job #950908)
Cod sursa(job #950908)
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
const int N = 1e6;
const int B = 16;
const int key = (1 << B) - 1;
int v[N], n;
ifstream in("algsort.in");
ofstream out("algsort.out");
void sort(int* st, int* dr){
int cnt[1 << B], n = dr - st, *a, *b;
a = st;
b = (int*)malloc(n * sizeof(int));
for (int t = 0 ; t < 32 ; t += B){
memset(cnt, 0, sizeof(cnt));
for (int i = 0 ; i < n ; i++)
++cnt[ (a[i] >> t) & key ];
for (int i = (1 << B) - 1 ; i ; i--)
cnt[i] = cnt[i - 1];
cnt[0] = 0;
for (int i = 1 ; i < (1 << B) ; i++)
cnt[i] += cnt[i - 1];
for (int i = 0 ; i < n ; i++)
b[ cnt[ (a[i] >> t) & key ]++ ] = a[i];
swap(a, b);
}
if (a == st)
return free(b);
memcpy(v, a, (dr - st) * sizeof(int));
free(a);
}
int main(){
in >> n;
for (int i = 1 ; i <= n ; i++)
in >> v[i];
sort(v + 1, v + n + 1);
for (int i = 1 ; i <= n ; i++)
out << v[i] << " ";
out << "\n";
return 0;
}