Pagini recente » Cod sursa (job #1909138) | Cod sursa (job #1806857) | Cod sursa (job #827480) | Cod sursa (job #2419140) | Cod sursa (job #1519909)
#include <stdio.h>
#include <stdlib.h>
void merge(int *v,int l,int r) {
int m = (l + r) / 2,i = l,j = m+1,k = 0,*p;
p = (int*)malloc((r - l + 1)*sizeof(int));
while (i <= m && j <= r) {
if (v[i] < v[j]) {
p[k] = v[i];
i++;
}
else {
if (v[j] < v[i]) {
p[k] = v[j];
j++;
}
else {
p[k++] = v[i++];
p[k] = v[j++];
}
}
k++;
}
while (i <= m) p[k++] = v[i++];
while (j <= r) p[k++] = v[j++];
for (i=0;i+l<=r;i++) v[i+l] = p[i];
free(p);
}
void mergesort(int *v,int l,int r) {
if (l == r) return;
int m = (l + r) / 2;
mergesort(v,l,m);
mergesort(v,m+1,r);
merge(v,l,r);
}
int main() {
int n,i,*v;
FILE *f = fopen("algsort.in","r");
fscanf(f,"%d",&n);
v = (int*)malloc(n*sizeof(int));
for (i=0;i<n;i++) fscanf(f,"%d",&v[i]);
fclose(f);
mergesort(v,0,n-1);
f = fopen("algsort.out","w");
for(i=0;i<n;i++) fprintf(f,"%d ",v[i]);
fclose(f);
free(v);
return 0;
}