fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void merge(int arr[],int l,int m,int r){
  5. int first = m-l+1;
  6. int second = r-m;
  7. int *L=(int *)malloc(first*sizeof(int));
  8. int *R=(int *)malloc(second*sizeof(int));
  9. int i=0;
  10. int j=0;
  11. for(i=0;i<first;i++) L[i]=arr[l+i];
  12. for(j=0;j<second;j++) R[j]=arr[1+j+m];
  13. i = j = 0;
  14. int cnt = l;
  15. while(i<first && j<second){
  16. if(L[i]<R[j])
  17. arr[cnt++]=L[i++];
  18. else
  19. arr[cnt++]=R[j++];
  20. }
  21. while(i<first) arr[cnt++]=L[i++];
  22. while(j<second) arr[cnt++]=R[j++];
  23. free(L);
  24. free(R);
  25. }
  26.  
  27. void merge_sort(int arr[],int left,int right){
  28. if(left<right){
  29. int mid=(left+right)/2;
  30. merge_sort(arr,left,mid);
  31. merge_sort(arr,mid+1,right);
  32. merge(arr,left,mid,right);
  33. }
  34.  
  35. }
  36.  
  37. int main() {
  38. int mehdi[]={5,4,3,2,1};
  39. merge_sort(mehdi,0,(int)4);
  40. for(int i=0;i<5;++i) printf("%d ",mehdi[i]);
  41. return 0;
  42. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
1 2 3 4 5