Pagini recente » Cod sursa (job #2345575) | Cod sursa (job #2385394) | Cod sursa (job #2251141) | Cod sursa (job #1822304) | Cod sursa (job #1785734)
#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;
}
void MergeSort(int* v, int n) {
int m = n / 2, *rez;
if(n > 1) {
MergeSort(v, m);
MergeSort(v + m, n - m);
rez = Interclaseaza(v, m, v + m, n - m);
for (int i = 0; i < n; i++)
v[i] = rez[i];
}
}
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]);
MergeSort(v, n);
for (int i = 0; i < n; i++)
fprintf(g, "%d ", v[i]);
return 0;
}