Pagini recente » Cod sursa (job #43053) | Cod sursa (job #609960) | Cod sursa (job #824992) | Cod sursa (job #1745669) | Cod sursa (job #1506667)
#include <stdio.h>
#define Nadejde 500000
int N;
int a[Nadejde];
/** Vezi ce valoare are bitul "x". **/
int getBit(int val, int x) {
return val & (1LL << x);
}
/** Sorteaza crescator vectorul "a". **/
void sort(int begin, int end, int bit) {
int b = begin, e = end;
while (b <= e) {
while ((b < N) && (!getBit(a[b], bit))) {
b++;
}
while ((e >= 0) && (getBit(a[e], bit))) {
e--;
}
if (b <= e) {
int tmp = a[b];
a[b++] = a[e];
a[e--] = tmp;
}
}
if ((b < end) && (bit > 0)) {
sort(b, end, bit - 1);
}
if ((begin < e) && (bit > 0)) {
sort(begin, e, bit - 1);
}
}
int main(void) {
int i;
FILE *f = fopen("algsort.in", "r");
/* Citim vectorul. */
fscanf(f, "%d", &N);
for (i = 0; i < N; i++) {
fscanf(f, "%d", &a[i]);
}
fclose(f);
f = fopen("algsort.out", "w");
sort(0, N - 1, 30);
/* Afisam vectorul. */
for (i = 0; i < N; i++) {
fprintf(f, "%d ", a[i]);
}
fputc('\n', f);
fclose(f);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}