Pagini recente » Cod sursa (job #2613489) | Cod sursa (job #1307475) | Cod sursa (job #2524133) | Cod sursa (job #777162) | Cod sursa (job #3179124)
#include <stdio.h>
#include <stdlib.h>
void Merge(int *arr,int low,int mid,int high){
int numA=mid-low+1;
int numB=high-mid;
int numC=high-low+1;
int *A=(int *) malloc(sizeof(int)*numA);
int *B=(int *) malloc(sizeof(int)*numB);
int *C=(int *) malloc(sizeof(int)*numC);
for(int i=0;i<numA;i++)
A[i]=arr[low+i];
for(int j=0;j<numB;j++)
B[j]=arr[mid+1+j];
int i=0;
int j=0;
int k=0;
while(i<numA && j<numB){
if(A[i]<B[j])
C[k++] = A[i++];
else C[k++]=B[j++];
}
while(i<numA)
C[k++]=A[i++];
while(j<numB)
C[k++]=B[j++];
for(int i=0;i<k;i++)
arr[low+i]=C[i];
free(A);
free(B);
free(C);
}
void MergeSort(int *arr,int low,int high){
if(low<high){
int mid=low+(high-low)/2;
MergeSort(arr,low,mid);
MergeSort(arr,mid+1,high);
Merge(arr,low,mid,high);
}
}
int main() {
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int n;
scanf("%d",&n);
int *arr=(int *) malloc(sizeof(int)*n);
for(int i=0;i<n;i++)
scanf("%d",&arr[i]);
MergeSort(arr,0,n-1);
for(int i=0;i<n;i++)
printf("%d ",arr[i]);
free(arr);
return 0;
}