Pagini recente » Cod sursa (job #2549942) | Cod sursa (job #4321) | Cod sursa (job #2415931) | Cod sursa (job #3245714) | Cod sursa (job #865115)
Cod sursa(job #865115)
#include <stdio.h>
#define NMAX 500001
int N, tab[NMAX], i;
void read(void)
{
FILE *f = fopen("algsort.in", "r");
fscanf(f, "%d", &N);
for(i = 0; i < N; ++i)
fscanf(f, "%d", &tab[i]);
fclose(f);
}
void radix_sort(int l, int r, int b)
{
int i, j, t;
if(l >= r || b == -1)
return;
i = l, j = r;
do{
while(!((tab[i] >> b) & 1) && (i <= j))
i++;
while(((tab[j] >> b) & 1) && (j >= i))
j--;
if(i < j)
t = tab[i], tab[i] = tab[j], tab[j] = t;
}while(i < j);
radix_sort(l, i-1, b-1);
radix_sort(j+1, r, b-1);
}
void print(void)
{
FILE *g = fopen("algsort.out", "w");
for(i = 0; i < N; ++i)
fprintf(g, "%d ", tab[i]);
fclose(g);
}
int main(void)
{
read();
radix_sort(0, N-1, sizeof(tab[0]));
print();
}