fork download
  1. class MergeSort {
  2.  
  3. public static void mergesort(int[] x) {
  4. mergesort(x, 0, x.length - 1);
  5. }
  6.  
  7. private static void mergesort(int[] x, int inicio, int fim) {
  8. if (inicio >= fim) return;
  9. int meio = (inicio + fim) / 2;
  10. mergesort(x, inicio, meio);
  11. mergesort(x, meio + 1, fim);
  12. intercala(x, inicio, fim, meio);
  13. }
  14.  
  15. private static void intercala(int[] x, int inicio, int fim, int meio) {
  16. int[] aux = new int[x.length];
  17. int inicioVetor1 = inicio;
  18. int inicioVetor2 = meio + 1;
  19. int livre = inicio;
  20. while (inicioVetor1 <= meio && inicioVetor2 <= fim) {
  21. if (x[inicioVetor1] <= x[inicioVetor2]) {
  22. aux[livre] = x[inicioVetor1];
  23. inicioVetor1++;
  24. } else {
  25. aux[livre] = x[inicioVetor2];
  26. inicioVetor2++;
  27. }
  28. livre++;
  29. }
  30. for (int i = inicioVetor1; i <= meio; i++) {
  31. aux[livre] = x[i];
  32. livre++;
  33. }
  34. for (int i = inicioVetor2; i <= fim; i++) {
  35. aux[livre] = x[i];
  36. livre++;
  37. }
  38. for (int i = inicio; i <= fim; i++) {
  39. x[i] = aux[i];
  40. }
  41. }
  42.  
  43. public static void main(String[] args) {
  44. int[] x = {6, 2, 1, 3, 0};
  45. mergesort(x);
  46. for (int y : x) {
  47. System.out.println(y);
  48. }
  49. }
  50. }
Success #stdin #stdout 0.04s 4386816KB
stdin
Standard input is empty
stdout
0
1
2
3
6