fork(4) download
  1. /*Program of sorting using merge sort through recursion*/
  2.  
  3. #include<stdio.h>
  4. #define MAX 100
  5.  
  6. void merge_sort(int *arr, int left, int right)
  7. {
  8. int mid;
  9. int temp[MAX];
  10. if(left<right)/* if more than one element*/
  11. {
  12. mid = (left+right)/2;
  13. merge_sort( arr, left , mid ); /* Sort arr[low:mid] */
  14. merge_sort( arr, mid+1, right ); /* Sort arr[mid+1:right] */
  15. /*Merge arr[low:mid] and arr[mid+1:right] to temp[left:right]*/
  16. merge( arr, temp, left, mid, mid+1, right );
  17. /* Copy temp[left:right] to arr[left:right] */
  18. copy(arr,temp,left, right);
  19. }
  20. }/*End of merge_sort*/
  21.  
  22. /*Merges arr[left1:right1] and arr[left2:right2] to temp[left1:right2]*/
  23. void merge( int arr[], int temp[], int left1, int right1, int left2, int right2 )
  24. {
  25. int i = left1;
  26. int j = left2 ;
  27. int k = left1 ;
  28.  
  29. while( (i <= right1) && (j <=right2))
  30. temp[k++] = (arr[i]<=arr[j])? arr[i++]: arr[j++];
  31. while( i <= right1 )
  32. temp[k++]=arr[i++];
  33. while( j <= right2 )
  34. temp[k++]=arr[j++];
  35. }/*End of merge()*/
  36.  
  37. void copy(int *arr, int *temp, int left, int right )
  38. {
  39. for(int i=left; i<=right; i++)
  40. arr[i]=temp[i];
  41. }
  42.  
  43.  
  44. int main()
  45. {
  46. int i, n, arr[MAX];
  47.  
  48. printf("Enter the number of elements : ");
  49. scanf("%d",&n);
  50.  
  51. for(i=0; i<n; i++)
  52. {
  53. printf("Enter element %d : ",i+1);
  54. scanf("%d",&arr[i]);
  55. }
  56.  
  57. merge_sort( arr, 0, n-1);
  58.  
  59. printf("\nSorted list is :\n");
  60. for(i=0; i<n; i++)
  61. printf("%d ", arr[i]);
  62. printf("\n");
  63. }/*End of main()*/
  64.  
  65.  
  66.  
  67.  
Success #stdin #stdout 0s 9424KB
stdin
5
10 5 1 20 60
stdout
Enter the number of elements : Enter element 1 : Enter element 2 : Enter element 3 : Enter element 4 : Enter element 5 : 
Sorted list is :
1 5 10 20 60