Pagini recente » Cod sursa (job #2235813) | Cod sursa (job #2136293) | Cod sursa (job #2540633) | Cod sursa (job #2072014) | Cod sursa (job #2669706)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 500000
void merge2(int v[], int start, int mid, int end){
int n1 = mid - start + 1, n2 = end - mid;
int left[n1], right[n2];
for (int i = 0; i < n1; i ++) left[i] = v[i + start];
for (int i = 0; i < n2; i ++) right[i] = v[mid + i + 1];
int i1, i2;
i1 = i2 = 0;
int ind = start;
while (i1 < n1 && i2 < n2){
if (left[i1] <= right[i2]) v[ind ++] = left[i1 ++];
else v[ind ++] = right[i2 ++];
}
while (i1 < n1) v[ind++] = left[i1++];
while (i2 < n2) v[ind++] = right[i2++];
}
void mergesort(int v[], int start, int end){
if (start == end) return;
int mid = (start + end) / 2;
mergesort(v, start, mid);
mergesort(v, mid + 1, end);
merge2(v, start, mid, end);
}
int v[NMAX];
int main()
{
FILE *fin, *fout;
fin = fopen("algsort.in", "r");
fout = fopen("algsort.out", "w");
int n;
fscanf(fin, "%d", &n);
for (int i = 0; i < n; i++) fscanf(fin, "%d", &v[i]);
merge2(v, 0, 3, 5);
mergesort(v, 0, n-1);
for (int i = 0; i < n; i++) fprintf(fout, "%d ", v[i]);
return 0;
}