Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. #include <stddef.h>
  2. #include <malloc.h>
  3. #include <string.h>
  4.  
  5. int comparator(const void *left, const void *right) {
  6. //assert(left != NULL);
  7. //assert(right != NULL);
  8. return *((const int *) left) - *((const int *) right);
  9. }
  10.  
  11.  
  12. void mergesort(void *array, size_t elements, size_t element_size) { //,int (*comparator)(const void *, const void *)) {
  13. size_t mid;
  14. size_t l = 0;
  15. size_t r = elements;
  16. if (l == r - 1) {
  17. return;
  18. }
  19. mid = ((l + r) / 2);
  20. size_t first = l;
  21. size_t second = mid;
  22. mergesort(array, mid - l , element_size);//, comparator);
  23. mergesort(array + mid * element_size, r - mid, element_size);//, comparator);
  24. void *dop = (void *) malloc((elements + 5) * element_size);
  25.  
  26. for (int i = 0; i < elements; i++) {
  27. if (second < r && comparator(array + first * element_size, array + second * element_size) <= 0 && first < mid) {
  28. //*(dop + i) = *(array + first);
  29. memcpy(dop + i * element_size, array + first * element_size, element_size);
  30. first += element_size;
  31. } else {
  32. if (second < r) {
  33. //*(dop + i) = *(array + second);
  34. memcpy(dop + i * element_size, array + second, element_size);
  35. second += element_size;
  36. } else {
  37. //*(dop + i) = *(array + first);
  38. memcpy(dop + i * element_size, array + first*element_size, element_size);
  39. first += element_size;
  40. }
  41. }
  42. }
  43.  
  44. for (int i = 0; i < elements; i++) {
  45. //*(array + l + i) = *(dop + i);
  46. memcpy(array + l*element_size + i * element_size, dop + i * element_size, element_size);
  47. }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement