Advertisement
Guest User

Untitled

a guest
Apr 12th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.03 KB | None | 0 0
  1. int merge_two_ordered_arrays(unsigned size1, void const *arr1,
  2.                              unsigned size2, void const *arr2,
  3.                              unsigned size_result, void *result,
  4.                              size_t sizeof_element,
  5.                              int compare(const void *elem1, const void *elem2))
  6. {
  7.     unsigned ind1 = 0, ind2 = 0;
  8.     void *curr_pos = result;
  9.     while(ind1 < size1 && ind2 < size2 && ind1 + ind2 < size_result)
  10.     {
  11.         if(compare((char*)(arr1) + ind1*sizeof_element, (char*)(arr2) + ind2*sizeof_element) <= 0)
  12.         {
  13.             memcpy(curr_pos, (char*)(arr1) + ind1*sizeof_element, sizeof_element);
  14.             ++ind1;
  15.         }
  16.         else
  17.         {
  18.             memcpy(curr_pos, (char*)(arr2) + ind2*sizeof_element, sizeof_element);
  19.             ++ind2;
  20.         }
  21.         curr_pos = (char*)curr_pos + sizeof_element;
  22.     }
  23.     if(ind1 + ind2 < size_result)
  24.     {
  25.         if(ind1 < size1)
  26.             memcpy(curr_pos, (char*)(arr1) + ind1*sizeof_element, (size_result - size2 - ind1)*sizeof_element);
  27.         if(ind2 < size2)
  28.             memcpy(curr_pos, (char*)(arr2) + ind2*sizeof_element, (size_result - size1 - ind2)*sizeof_element);
  29.     }
  30.     return EXIT_SUCCESS;
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement