Pagini recente » Cod sursa (job #970162) | Cod sursa (job #556826) | Cod sursa (job #404198) | Cod sursa (job #3160815) | Cod sursa (job #1778214)
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
FILE *f=fopen("algsort.in","r");
FILE *g=fopen("algsort.out","w");
int* Interclaseaza(int *v1, int n, int *v2, int m) {
int i1 = 0, i2 = 0, k = 0;
int *c = (int*)calloc(n + m + 1, sizeof(int));
while (i1 < n && i2 < m) {
if(v1[i1] >= v2[i2]) {
c[k++] = v2[i2];
i2++;
} else {
c[k++] = v1[i1];
i1++;
}
}
while (i1 < n) {
c[k++] = v1[i1];
i1++;
}
while (i2 < m) {
c[k++] = v2[i2];
i2++;
}
return c;
}
int* MergeSort(int* v, int n) {
int m = n / 2, *v1, *v2;
if(n > 1) {
v1 = MergeSort(v, m);
v2 = MergeSort(v + m, n - m);
int* rez = Interclaseaza(v1, m, v2, n - m);
return rez;
} else {
return v;
}
}
int main()
{
int n, *v;
fscanf(f, "%d", &n);
v = (int*)calloc(n + 1, sizeof(int));
for (int i = 0; i < n; i++)
fscanf(f, "%d", &v[i]);
int *rez = MergeSort(v, n);
for (int i = 0; i < n; i++)
fprintf(g, "%d ", rez[i]);
return 0;
}