Advertisement
Guest User

Untitled

a guest
May 27th, 2015
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. /*
  2. Implementation of the Merge Sort Algorithm
  3. Author: Marcos Castro - www.GeeksBR.com
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h> // malloc, free
  8.  
  9.  
  10. // merge the vectors
  11. void merge(int vec_left[], int vec_right[],
  12. int vec[], int size_vec_left, int size_vec_right, int size_vec)
  13. {
  14. int i = 0, j = 0, k = 0;
  15.  
  16. // makes the merge
  17. while(i < size_vec_left && j < size_vec_right)
  18. {
  19. if(vec_left[i] <= vec_right[j])
  20. {
  21. vec[k] = vec_left[i];
  22. i++;
  23. }
  24. else
  25. {
  26. vec[k] = vec_right[j];
  27. j++;
  28. }
  29. k++;
  30. }
  31.  
  32. // fills with the rest of the elements
  33. while(i < size_vec_left)
  34. {
  35. vec[k] = vec_left[i];
  36. i++;
  37. k++;
  38. }
  39.  
  40. while(j < size_vec_right)
  41. {
  42. vec[k] = vec_right[j];
  43. j++;
  44. k++;
  45. }
  46. }
  47.  
  48.  
  49. // merge sort algorithm
  50. void merge_sort(int vec[], int size_vec)
  51. {
  52. int *vec_left, *vec_right;
  53. int i, middle;
  54.  
  55. if(size_vec < 2) // base condition
  56. return;
  57.  
  58. middle = size_vec / 2; // gets the middle of the vector
  59.  
  60. // creates two vectors
  61. vec_left = (int*)malloc(middle * sizeof(int));
  62. vec_right = (int*)malloc((size_vec - middle) * sizeof(int));
  63.  
  64. // fills the vectors
  65. for(i = 0; i < middle; i++)
  66. vec_left[i] = vec[i];
  67. for(i = middle; i < size_vec; i++)
  68. vec_right[i - middle] = vec[i];
  69.  
  70. // recursive calls
  71. merge_sort(vec_left, middle);
  72. merge_sort(vec_right, size_vec - middle);
  73. merge(vec_left, vec_right, vec, middle, size_vec - middle, size_vec);
  74.  
  75. free(vec_right);
  76. free(vec_left);
  77. }
  78.  
  79. int main()
  80. {
  81. // the vector that will be sorted
  82. int vec[] = {25,40,55,20,44,35,38,99,10,65,50};
  83. int size_vec = sizeof(vec) / sizeof(int);
  84.  
  85. // call merge sort
  86. merge_sort(vec, size_vec);
  87.  
  88. // shows the sorted vector
  89. int i;
  90. for(i = 0; i < size_vec; i++)
  91. printf("%d ", vec[i]);
  92.  
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement