Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. int * merge(int *A, int a_size, int *B, int b_size)
  2. {
  3. int ai, bi, ci, i;
  4. int * C;
  5. int c_size = a_size + b_size;
  6. ai = bi = ci = 0;
  7. C = (int*)malloc(c_size*sizeof(int));
  8. while ((ai < a_size) && (bi < b_size))
  9. {
  10. if (A[ai] < B[bi])
  11. {
  12. C[ci] = A[ai];
  13. ai++;
  14. ci++;
  15. }
  16. else
  17. {
  18. C[ci] = B[bi];
  19. bi++;
  20. ci++;
  21. }
  22. }
  23. if (ai >= a_size)
  24. for (i = ci; i < c_size; i++, bi++)
  25. C[i] = B[bi];
  26. else if (bi >= b_size)
  27. for (i = ci; i < c_size; i++, ai++)
  28. C[i] = A[ai];
  29. for (i = 0; i < a_size; i++)
  30. A[i] = C[i];
  31. for (i = 0; i < b_size; i++)
  32. B[i] = C[a_size + i];
  33. return C;
  34. }
  35.  
  36. void merge_sort(int *A, int min, int max)
  37. {
  38. int *C;
  39. int mid = (min + max) / 2;
  40. int left = mid - min + 1;
  41. int right = max - mid;
  42. if (max != min)
  43. {
  44. merge_sort(A, min, mid);
  45. merge_sort(A, mid + 1, max);
  46. C = merge(A + min, left, A + mid + 1, right);
  47. }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement