Pagini recente » Cod sursa (job #2008276) | Cod sursa (job #1740725) | Cod sursa (job #1599066) | Cod sursa (job #754408) | Cod sursa (job #1042924)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <limits.h>
int main()
{
int n, i, m;
FILE *f = fopen("algsort.in", "r"), *g = fopen("algsort.out", "w");
fscanf(f,"%d", &n);
int *v = (int*)malloc(sizeof(int)*n);
if (sqrt((float)n) == trunc(sqrt((float)n)))
m = trunc(sqrt((float)n));
else m = trunc(sqrt((float)n)) + 1;
int*smen = (int*)malloc(sizeof(int)*m);
for (i = 0; i < n; i++)
fscanf(f,"%d", &v[i]);
int sec = trunc(sqrt((float)n)), j = 0, k = 0, min;
for (i = 0; i < n; i++)
{
if (!j) min = INT_MAX;
if (v[i] < min)
min = v[i];
if (j == sec-1)
{
smen[++k] = min;
j = -1;
}
j++;
}
smen[++k] = min;
int*sortat = (int*)malloc(sizeof(int)*n);
int imin;
k = 0;
while (k < n)
{
min = INT_MAX;
for (i = 1; i <= m; i++)
{
if (smen[i] < min)
{
min = smen[i];
imin = i;
}
}
sortat[k] = min;
min = INT_MAX;
j = (imin - 1)*sec;
while (j < imin*sec && j<n)
{
if (v[j] != sortat[k])
{
if (v[j] < min)
min = v[j];
}
else v[j] = INT_MAX;
j++;
}
smen[imin] = min;
k++;
}
for (i = 0; i < n; i++)
fprintf(g,"%d ", sortat[i]);
return 0;
}