#include <stdio.h>
#include <stdlib.h>
typedef unsigned int TYP;
#define OZNACZENIE_TYPU "u"
TYP *tablica;
void merge(unsigned long start, unsigned long srodek, unsigned long stop)
{
TYP tab_out[stop-start+1];
unsigned long i1, i2, io, k;
i1 = start;
i2 = srodek+1;
io = 0;
while ((i1 <= srodek) && (i2 <= stop))
if (tablica[i1] < tablica[i2])
tab_out[io++] = tablica[i1++];
else
tab_out[io++] = tablica[i2++];
if (i1 > srodek)
for (k = i2; k <= stop; k++, io++)
tab_out[io] = tablica[k];
else
for (k = i1; k <= srodek; k++, io++)
tab_out[io] = tablica[k];
for (k = start; k <= stop; k++)
tablica[k] = tab_out[k-start];
}
void merge_sort(unsigned long start, unsigned long stop)
{
if (start == stop) return;
else
{
unsigned long srodek = (start+stop)/2;
merge_sort(start, srodek);
merge_sort(srodek+1, stop);
merge(start, srodek, stop);
}
}
unsigned long i, licznik = 0;
TYP in = 0;
char *smiec;
int main(void)
{
while (!feof(stdin))
if (fscanf(stdin, "%" OZNACZENIE_TYPU "\n", &in)!=0)
{
if (!licznik)
tablica = (TYP *)malloc(sizeof(TYP));
else
tablica = (TYP *)realloc(tablica,(licznik+1)*sizeof(TYP));
if (tablica == NULL)
{
fprintf(stderr, "Brak pamięci! Program nie może kontynuować działania!\n");
exit(1);
}
tablica[licznik++] = in;
}
else
{
fscanf(stdin, "%s\n", &smiec);
fprintf(stderr,"\"%s\" nie jest liczbą! Pozycja zostanie zignorowana!\n", &smiec);
}
merge_sort(0, licznik-1);
for(i = 0; i < licznik; i++)
printf("%" OZNACZENIE_TYPU "\n", tablica[i]);
return 0;
}