Pagini recente » Cod sursa (job #2676288) | Cod sursa (job #2837739) | Cod sursa (job #2775091) | Cod sursa (job #2927514) | Cod sursa (job #1556770)
#include<stdio.h>
#include<stdlib.h>
void merge(int *v, int start,int mij,int end)
{
int *v1 = (int *) calloc(mij - start + 1, sizeof(int));
int i, j;
for(i = 0; i < mij - start + 1; i++)
v1[i] = v[start + i];
int *v2 = (int *) calloc(end - mij, sizeof(int));
for(i = 0; i < end - mij; i++)
v2[i] = v[mij + 1 + i];
int n1 = mij - start + 1;
int n2 = end - mij;
i = j = 0;
int k = start;
while(i < n1 && j < n2)
{
if(v1[i] < v2[j])
v[k++] = v1[i++];
else
v[k++] = v2[j++];
}
while( i < n1)
v[k++] = v1[i++];
while( j < n2)
v[k++] = v2[j++];
free(v1);
free(v2);
}
void mergeSort(int *v, int start,int end)
{
if(end<= start)
return;
int mij = (start + end)/2;
mergeSort(v,start,mij);
mergeSort(v,mij+1,end);
merge(v,start,mij,end);
}
int main(void)
{
FILE * fin = fopen("algsort.in","rt");
FILE * fout = fopen("algsort.out","wt");
int n;
fscanf(fin,"%d",&n);
// printf("%d ", n);
int * v;
v = (int*) malloc(n*sizeof(int));
int i;
for(i = 0 ; i < n ; i++)
{
fscanf(fin,"%d",v+i);
// printf("%d ",v[i]);
}
mergeSort(v,0,n-1);
for(i = 0; i < n; i++)
fprintf(fout,"%d ", v[i]);
fclose(fin);
fclose(fout);
return 0;
}