Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <limits.h>
- void intercala(int *A, int p, int q, int r)
- {
- int pilha1, pilha2, i, j, k;
- int * L;
- int * R;
- pilha1 = p - q + 1;
- pilha2 = r - q;
- L = (int*)malloc(sizeof(int) * pilha1 + 1);
- R = (int*)malloc(sizeof(int) * pilha2 + 1);
- i = 1;
- j = 1;
- k = 0;
- k = p;
- for(i = 0; i < pilha1; i++)
- {
- L[i] = A[p + i];
- }
- for(j = 0; j < pilha2; j++)
- {
- R[i] = A[q + j];
- }
- L[pilha1 + 1] = INT_MAX;
- R[pilha2 + 1] = INT_MAX;
- for(k = p; i < r; i++)
- {
- if(L[i] < R[j])
- {
- A[k] = L[i];
- i = i + 1;
- }
- else
- A[k] = R[j];
- j = j + 1;
- }
- }
- void merge(int *A , int p, int r)
- {
- int q;
- if(p < r)
- {
- q = ((p + r) / 2);
- merge(A, p, q);
- merge(A, q + 1, r);
- intercala(A, p, q, r);
- }
- }
- int main()
- {
- int i, p, k;
- int *A;
- printf("Digite o tamanho da entrada:\n");
- scanf("%d\n", &k);
- A = (int*)malloc(sizeof(int) * k);
- for(i = 0; i < k; i++)
- {
- scanf("%d", &A[i]);
- }
- merge(A, p = 0, k - 1);
- for(i = 0; i < k; i++)
- {
- printf("%d", A[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement