fork download
  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. class MergeSortClass {
  5. public static void main(String[] args) {
  6. List<Integer> lista = new ArrayList<>();
  7. lista.add(0);
  8. lista.add(3);
  9. lista.add(9);
  10. lista.add(18);
  11. lista.add(5);
  12. lista.add(4);
  13. lista.add(6);
  14. lista.add(10);
  15. ordenar(lista);
  16. System.out.println(lista.toString());
  17. }
  18.  
  19. public static void ordenar(List<Integer> lista) {
  20. ordenar(lista, 0, lista.size() - 1);
  21. }
  22.  
  23. private static void ordenar(List<Integer> lista, int inicio, int fim) {
  24. if (inicio >= fim) return;
  25.  
  26. int meio = (inicio + fim) / 2;
  27.  
  28. ordenar(lista, inicio, meio);
  29. ordenar(lista, meio + 1, fim);
  30. intercalar(lista, inicio, meio, fim);
  31. }
  32.  
  33. private static void intercalar(List<Integer> lista, int inicio, int meio, int fim) {
  34.  
  35. int i = inicio;
  36. int j = meio + 1;
  37.  
  38. List<Integer> temp = new ArrayList<>(fim - inicio + 1);
  39.  
  40. while (i <= meio && j <= fim) {
  41. int a = lista.get(i);
  42. int b = lista.get(j);
  43. if (a < b) {
  44. temp.add(a);
  45. i++;
  46. } else {
  47. temp.add(b);
  48. j++;
  49. }
  50. }
  51.  
  52. while (i <= meio) {
  53. temp.add(lista.get(i));
  54. i++;
  55. }
  56.  
  57. while (j <= fim) {
  58. temp.add(lista.get(j));
  59. j++;
  60. }
  61.  
  62. for (int k = 0; k < temp.size(); k++) {
  63. lista.set(k + inicio, temp.get(k));
  64. }
  65. }
  66. }
Success #stdin #stdout 0.09s 27516KB
stdin
Standard input is empty
stdout
[0, 3, 4, 5, 6, 9, 10, 18]