Pagini recente » Cod sursa (job #2515355) | Cod sursa (job #2750297) | Cod sursa (job #1312793) | Cod sursa (job #260219) | Cod sursa (job #1506295)
#include <stdio.h>
#define Nadejde 500000
#define Mask 31
#define NIL -1
int N;
int a[Nadejde];
/** Verifica daca bitul "x" din "val" este setat. **/
int getBit(int val, int x) {
return (val >> x) & 1;
}
/** Sorteaza crescator portiunea [begin, end]. **/
void sort(int begin, int end, int bit) {
if (bit != NIL) {
int b = begin, e = end;
while (b <= e) {
while (!getBit(a[b], bit)) {
b++;
}
while (getBit(a[e], bit)) {
e--;
}
if (b <= e) {
int tmp = a[b];
a[b++] = a[e];
a[e--] = tmp;
}
}
if (begin < e) {
sort(begin, e, bit - 1);
}
if (b < end) {
sort(b, end, bit - 1);
}
}
}
int main(void) {
int i;
FILE *f = fopen("algsort.in", "r");
/* Citeste 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, Mask - 1);
/* Afiseaza vectorul sortat. */
for (i = 0; i < N; i++) {
fprintf(f, "%d ", a[i]);
}
fputc('\n', f);
fclose(f);
/// Multumim Doamne!!
puts("Doamne ajuta!");
return 0;
}