Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/07/2012, 17:44
alexg88
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 9 meses
Puntos: 344
Respuesta: Ordenar LinkedList

Puedes usar mergeSort.

Te dejo una implementación que se me ha ocurrido:

Código Java:
Ver original
  1. LinkedList<String> cadenas = new LinkedList<String>();
  2.         Collections.addAll(cadenas, "Hola", "Esteban", "Mañana", "Deseo", "Adios", "Alvaro", "Abierto");
  3.  
  4.         LinkedList<String> ordenadas = MergeSort(cadenas, new Comparator<String>() {
  5.  
  6.             @Override
  7.             public int compare(String o1, String o2) {
  8.                 return o1.compareTo(o2);
  9.             }
  10.         });


Código Java:
Ver original
  1. public static <T> LinkedList<T> MergeSort(LinkedList<T> lista, Comparator<T> comparador) {
  2.  
  3.  
  4.         if (lista.size() > 1) {
  5.             LinkedList<T> lista1, lista2;
  6.  
  7.             int corte = lista.size() / 2;
  8.             lista1 = new LinkedList<T>(lista.subList(0, corte));
  9.             lista2 = new LinkedList<T>(lista.subList(corte, lista.size()));
  10.  
  11.             lista1 = MergeSort(lista1, comparador);
  12.             lista2 = MergeSort(lista2, comparador);
  13.             return Merge(lista1, lista2, comparador);
  14.         } else {
  15.             return lista;
  16.         }
  17.  
  18.  
  19.     }
  20.  
  21.     private static <T> LinkedList<T> Merge(LinkedList<T> lista1, LinkedList<T> lista2, Comparator<T> comparador) {
  22.         LinkedList<T> listaSalida = new LinkedList<T>();
  23.  
  24.  
  25.         while (lista1.size() > 0 || lista2.size() > 0) {
  26.  
  27.  
  28.             if (lista2.size() == 0 || lista1.size() > 0 && comparador.compare(lista1.getFirst(), lista2.getFirst()) <= 0) {
  29.                 listaSalida.add(lista1.pollFirst());
  30.             } else if (lista1.size() == 0 || lista2.size() > 0 && comparador.compare(lista1.getFirst(), lista2.getFirst()) > 0) {
  31.                 listaSalida.add(lista2.pollFirst());
  32.             }
  33.         }
  34.         return listaSalida;
  35.  
  36.     }

En esta implementación uso Strings, pero puedes cambiarlo por el tipo que quieras usando un comparador personalizado (como el que te he puesto en el post anterior).

Saludos.