Ver Mensaje Individual
  #13 (permalink)  
Antiguo 21/10/2014, 11:56
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Ordenar ArrayList

Hola,

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Es que hay que currase un poco el comparador.
Ciertamente, y agregando mi versión del mismo, aunque no estoy seguro que de exactamente los mismo resultados, posiblemente sea mas simple de darle mantenimiento. Ahora solo queda observar el caso de la Ñ/ñ, CH/ch y otros casos especiales.

Código Java:
Ver original
  1. import java.util.Comparator;
  2.  
  3. public class Ordenar implements Comparator<String> {
  4.  
  5.     private int compare(char c1, char c2) {
  6.         int i1 = Character.isLetter(c1) ? 2 : Character.isDigit(c1) ? 1 : 0;
  7.         int i2 = Character.isLetter(c2) ? 2 : Character.isDigit(c2) ? 1 : 0;
  8.  
  9.         if (i1 != i2) {
  10.             return i2 - i1;
  11.         }
  12.  
  13.         return Character.compare(c1, c2);
  14.     }
  15.  
  16.     @Override
  17.     public int compare(String o1, String o2) {
  18.         if (o2.length() != o1.length()) {
  19.             return o1.length() - o2.length();
  20.         }
  21.  
  22.         int length = o1.length();
  23.         int compare;
  24.         for (int i = 0; i < length; i++) {
  25.             compare = compare(o1.charAt(i), o2.charAt(i));
  26.             if (compare != 0) {
  27.                 return compare;
  28.             }
  29.         }
  30.  
  31.         return 0;
  32.     }
  33.  
  34. }

Cita:
Iniciado por Profesor_Falken Ver Mensaje
... comentar que el metodo sort de Java utiliza concretamente el algoritmo Dual-Pivot Quicksort de Vladimir Yaroslavskiy. ...
De eso no puedo estar completamente seguro, pero según la documentación de Oracle, usa el método 'merge sort' ligeramente optimizado. Lo único que sé es que es rápido y estable.

http://docs.oracle.com/javase/tutori...hms/index.html

Saludos,