Guest User

Merge revisado

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