Advertisement
Guest User

Merge Sort

a guest
Apr 6th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4.  
  5. void intercala(int *A, int p, int q, int r)
  6. {
  7. int pilha1, pilha2, i, j, k;
  8. int * L;
  9. int * R;
  10. pilha1 = p - q + 1;
  11. pilha2 = r - q;
  12.  
  13. L = (int*)malloc(sizeof(int) * pilha1 + 1);
  14. R = (int*)malloc(sizeof(int) * pilha2 + 1);
  15. i = 1;
  16. j = 1;
  17. k = 0;
  18. k = p;
  19.  
  20. for(i = 0; i < pilha1; i++)
  21. {
  22. L[i] = A[p + i];
  23. }
  24. for(j = 0; j < pilha2; j++)
  25. {
  26. R[i] = A[q + j];
  27. }
  28. L[pilha1 + 1] = INT_MAX;
  29. R[pilha2 + 1] = INT_MAX;
  30.  
  31. for(k = p; i < r; i++)
  32. {
  33. if(L[i] < R[j])
  34. {
  35. A[k] = L[i];
  36. i = i + 1;
  37. }
  38. else
  39. A[k] = R[j];
  40. j = j + 1;
  41. }
  42. }
  43.  
  44. void merge(int *A , int p, int r)
  45. {
  46. int q;
  47. if(p < r)
  48. {
  49. q = ((p + r) / 2);
  50. merge(A, p, q);
  51. merge(A, q + 1, r);
  52. intercala(A, p, q, r);
  53. }
  54.  
  55. }
  56. int main()
  57. {
  58. int i, p, k;
  59. int *A;
  60. printf("Digite o tamanho da entrada:\n");
  61. scanf("%d\n", &k);
  62.  
  63. A = (int*)malloc(sizeof(int) * k);
  64.  
  65. for(i = 0; i < k; i++)
  66. {
  67. scanf("%d", &A[i]);
  68. }
  69.  
  70. merge(A, p = 0, k - 1);
  71. for(i = 0; i < k; i++)
  72. {
  73. printf("%d", A[i]);
  74. }
  75.  
  76. return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement