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