Pagini recente » Cod sursa (job #1090606) | Cod sursa (job #710516) | Cod sursa (job #2873535) | Cod sursa (job #145462) | Cod sursa (job #645158)
Cod sursa(job #645158)
#include <stdio.h>
#include <stdlib.h>
unsigned long *arr;
void merge(long lo, long m, long hi)
{
unsigned long i, j, k, *b;
b = (unsigned long*)malloc(sizeof(unsigned long) * (hi - lo + 1));
for(i = lo, k = 0; i <= hi; ++i, ++k)
b[k] = arr[i];
for(i = k = lo, j = m + 1; i <= m && j <= hi;)
if(b[i - lo] < b[j - lo])
arr[k++] = b[i++ - lo];
else
arr[k++] = b[j++ - lo];
while(i <= m)
arr[k++] = b[i++ - lo];
while(j <= hi)
arr[k++] = b[j++ - lo];
free(b);
}
void sort(long lo, long hi)
{
long m = (lo + hi)/2;
if(lo < hi)
{
sort(lo, m);
sort(m + 1, hi);
merge(lo, m, hi);
}
}
int main()
{
unsigned long i;
unsigned long size;
FILE *fpi = fopen("algsort.in", "r");
FILE *fpo = fopen("algsort.out", "w");
fscanf(fpi, "%u", &size);
arr = (unsigned long*)malloc(sizeof(unsigned long) * size);
for(i = 0; i < size; ++i)
fscanf(fpi, "%u", arr + i);
sort(0, size - 1);
for(i = 0; i < size; ++i)
{
fprintf(fpo, "%u ", arr[i]);
//printf("%u ", arr[i]);
}
fclose(fpi);
fclose(fpo);
free(arr);
return 0;
}