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