Puedes usar mergeSort.
Te dejo una implementación que se me ha ocurrido:
Código Java:
Ver originalLinkedList<String> cadenas = new LinkedList<String>();
Collections.
addAll(cadenas,
"Hola",
"Esteban",
"Mañana",
"Deseo",
"Adios",
"Alvaro",
"Abierto");
LinkedList<String> ordenadas = MergeSort(cadenas, new Comparator<String>() {
@Override
return o1.compareTo(o2);
}
});
Código Java:
Ver originalpublic static <T> LinkedList<T> MergeSort(LinkedList<T> lista, Comparator<T> comparador) {
if (lista.size() > 1) {
LinkedList<T> lista1, lista2;
int corte = lista.size() / 2;
lista1 = new LinkedList<T>(lista.subList(0, corte));
lista2 = new LinkedList<T>(lista.subList(corte, lista.size()));
lista1 = MergeSort(lista1, comparador);
lista2 = MergeSort(lista2, comparador);
return Merge(lista1, lista2, comparador);
} else {
return lista;
}
}
private static <T> LinkedList<T> Merge(LinkedList<T> lista1, LinkedList<T> lista2, Comparator<T> comparador) {
LinkedList<T> listaSalida = new LinkedList<T>();
while (lista1.size() > 0 || lista2.size() > 0) {
if (lista2.size() == 0 || lista1.size() > 0 && comparador.compare(lista1.getFirst(), lista2.getFirst()) <= 0) {
listaSalida.add(lista1.pollFirst());
} else if (lista1.size() == 0 || lista2.size() > 0 && comparador.compare(lista1.getFirst(), lista2.getFirst()) > 0) {
listaSalida.add(lista2.pollFirst());
}
}
return listaSalida;
}
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.