Pagini recente » Cod sursa (job #369156) | Cod sursa (job #1850244) | Cod sursa (job #1723811) | Cod sursa (job #2776179) | Cod sursa (job #2356374)
#include <stdio.h>
#define NMax 500001
void Merge(int *v, int start, int pivot, int end)
{
int i;
int b[NMax];
for(i = start; i <= end; ++i)
b[i] = 0;
i = start;
int k = start;
int j = pivot + 1;
while(i <= pivot && j <= end)
{
if(v[i] <= v[j]) b[k++] = v[i++];
else b[k++] = v[j++];
}
while(i <= pivot) b[k++] = v[i++];
while(j <= end) b[k++] = v[j++];
for(i = start; i <= end; ++i)
v[i] = b[i];
}
void Merge_Sort(int *v, int start, int end)
{
if(start < end)
{
int pivot = start + (end - start)/2; /// (start + end)/2
Merge_Sort(v, start, pivot);
Merge_Sort(v, pivot + 1, end);
Merge(v, start, pivot, end);
}
}
int main()
{
int v[NMax];
int n;
FILE* f = fopen("algsort.in", "r");
fscanf(f ,"%d", &n);
int i;
for(i = 0; i < n; ++i)
fscanf(f, "%d", &v[i]);
Merge_Sort(v, 0, n - 1);
fclose(f);
f = fopen("algsort.out", "w");
for(i = 0; i < n; ++i)
fprintf(f, "%d ", v[i]);
fprintf(f, "\n");
fclose(f);
return 0;
}