Pagini recente » Cod sursa (job #767286) | Cod sursa (job #1448429) | Cod sursa (job #2056847) | Cod sursa (job #1080499) | Cod sursa (job #1028088)
#include <stdio.h>
#include <math.h>
#define fin "algsort.in", "r"
#define fou "algsort.out", "w"
typedef unsigned long kint;
int main()
{
int n, i, k, l;
FILE* in = fopen(fin);
FILE* out = fopen(fou);
fscanf(in, "%d", &n);
k = sqrt(n);
l = 5;
k = n / l;
kint* A = malloc(sizeof(kint) * n);
kint* B = malloc(sizeof(kint) * k);
for(i = 0; i < n; i++)
{
fscanf(in, "%u", &A[i]);
if(i % l == 0 || B[i / l] > A[i])
B[i / l] = A[i];
}
unsigned int kmin, mmin;
int kp;
while(1)
{
kp = -1;
kmin = ~0;
for(i = 0; i < k; i++)
if(kmin > B[i] && B[i] != -1)
kmin = B[i],
kp = i;
if(kp == -1) break;
fprintf(out, "%u ", kmin);
for(i = kp * l; i < kp * l + l; i++)
{
if(A[i] == kmin)
{
A[i] = -1;
break;
}
}
mmin = ~0;
for(i = kp * l; i < kp * l + l; i++)
if(mmin > A[i] && A[i] != -1)
mmin = A[i];
if(mmin == ~0) mmin = -1;
B[kp] = mmin;
}
return 0;
}