Guest User

merge sort

a guest
Oct 7th, 2017
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3.  
  4. int a[20],n, nl, nr,left[20],right[20];
  5. void merge(int *l, int *r, int *x);
  6. void mergesort(int *x, int v);
  7.  
  8.  
  9. void main()
  10. {
  11. int i;
  12.  
  13.  
  14. printf("Enter the number of the elements \n");
  15. scanf("%d", &n);
  16. printf("Enter the array elements \n");
  17. for(i=0; i<n; i++)
  18. scanf("%d", &a[i]);
  19. printf("The array before sorting: \n");
  20. for(i=0; i<n; i++)
  21. printf("%d \n", a[i]);
  22.  
  23.  
  24. mergesort(a,n);
  25.  
  26. printf("The array after sorting: \n");
  27. for(i=0; i<n; i++)
  28. printf("%d \n", a[i]);
  29.  
  30. }
  31.  
  32.  
  33. void merge(int *l, int *r, int *x)
  34. {
  35. int i=0, j=0, k=0;
  36. while(i<nl && j<nr)
  37. {
  38. if(l[i]<=r[j])
  39. {
  40. x[k]=l[i];
  41. i++;
  42. }
  43. else
  44. {
  45. x[k]=r[j];
  46. j++;
  47. }
  48. k++;
  49. }
  50. while(i<nl)
  51. {
  52. x[k]=l[i];
  53. i++;
  54. k++;
  55. }
  56. while(j<nr)
  57. {
  58. x[k]=r[j];
  59. j++;
  60. k++;
  61. }
  62. }
  63.  
  64. void mergesort(int *x, int v)
  65. {
  66. int mid,i;
  67. if(n<2)
  68. return;
  69. mid=n/2;
  70. nl=mid;
  71. nr= n-mid;
  72.  
  73. for(i=0; i<mid; i++)
  74. left[i]=x[i];
  75.  
  76.  
  77. for(i=mid; i<n; i++)
  78. right[i-mid]= x[i];
  79.  
  80. mergesort(left, mid);
  81. mergesort(right,v-mid);
  82. merge(left, right, a);
  83.  
  84.  
  85. }
Add Comment
Please, Sign In to add comment