Pagini recente » Cod sursa (job #1962979) | Cod sursa (job #2026129) | Cod sursa (job #1634518) | simulare_oji2012_clasa_a_10-a | Cod sursa (job #1521264)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 100
void swap(int *p, int *q) {
int tmp = *p;
*p = *q;
*q = tmp;
}
void print(FILE *g, int *v, int n) {
int i;
for (i = 1; i <= n; i++) {
fprintf(g, "%d%c", v[i] , (i<n? ' ' : '\n' ));
}
}
int merge(int *v, int p, int middle, int q) {
int tmp[NMAX];// = malloc( n * sizeof(int));
int i,j,k;
for (i = p; i <= q; i++) {
tmp[i] = v[i];
}
i = p;
j = middle+1;
k = p;
while (i <= middle && j <= q) {
if (tmp[i] <= tmp[j]) v[k++] = tmp[i++];
else v[k++] = tmp[j++];
}
while (i <= middle)v[k++] = tmp[i++];;
while (j <= q) v[k++] = tmp[j++];
}
void mergeSort(int *v, int p, int q) {
if (p < q) {
int middle = (p+q)/2;
mergeSort(v, p, middle);
mergeSort(v, middle+1, q);
merge(v, p, middle, q);
}
}
int main() {
FILE *f = fopen("algsort.in", "r");
FILE *g = fopen("algsort.out", "w");
srand(time(NULL));
int n, *v,i;
fscanf(f,"%d", &n);
v = (int *)malloc((n+1) * sizeof(int));
for (i = 1; i <= n; i++) {
fscanf(f,"%d", &v[i]);
}
mergeSort(v, 1, n);
print(g, v, n);
free(v);
return 0;
}