fork download
  1. void mergeInt(int v[], int i, int meio, int j, int fim, int k, int aux[]) {
  2. if (i <= meio && (j > fim || v[i] < v[j])) {
  3. aux[k] = v[i];
  4. mergeInt(v, i + 1, meio, j, fim, k + 1, aux);
  5. } else if (j <= fim) {
  6. aux[k] = v[j];
  7. mergeInt(v, i, meio, j + 1, fim, k + 1, aux);
  8. }
  9. }
  10.  
  11. void mergeSortInt(int v[], int inicio, int fim, int aux[]) {
  12. int meio = (inicio + fim) / 2;
  13.  
  14. if (inicio < fim) {
  15. mergeSortInt(v, inicio, meio, aux);
  16. mergeSortInt(v, meio + 1, fim, aux);
  17. mergeInt(v, inicio, meio, meio + 1, fim, 0, aux);
  18.  
  19. for (int l = 0; l < fim - inicio + 1; l++) {
  20. v[inicio + l] = aux[l];
  21. }
  22. }
  23. }
  24.  
  25. void mergeSort(int v[], int tamanho) {
  26. int *aux = malloc(sizeof(int) * tamanho);
  27. mergeSortInt(v, 0, tamanho, aux);
  28. free(aux);
  29. }
  30.  
  31. int main() {
  32. int a[] = {10, 2, 7, 1, 4, 9, 3, 8, 0, 5, 6};
  33. mergeSort(a, 11);
  34. for (int i = 0; i < 11; i++) {
  35. printf("%d ", a[i]);
  36. }
  37. }
Success #stdin #stdout 0s 4532KB
stdin
Standard input is empty
stdout
0 1 2 3 4 5 6 7 8 9 10