J'implémente ma propre liste chaînée en Java. La classe de noeud a simplement un champ de chaîne appelé "nom" et un noeud appelé "lien". En ce moment j'ai une classe de pilote de test qui insère seulement plusieurs noms séquentiellement. Maintenant, j'essaie d'écrire une méthode de tri pour classer les nœuds par ordre alphabétique, mais j'ai un peu de mal avec ça. J'ai trouvé ce pseudo-code d'une bulle de la part de quelqu'un d'autre et j'ai essayé de l'implémenter, mais il ne triait pas complètement les entrées. Je ne suis pas vraiment sûr pourquoi. Toutes les suggestions sont appréciées!Tri manuel d'une liste chaînée en Java (lexicalement)
private void sort()
{
//Enter loop only if there are elements in list
boolean swapped = (head != null);
// Only continue loop if a swap is made
while (swapped)
{
swapped = false;
// Maintain pointers
Node curr = head;
Node next = curr.link;
Node prev = null;
// Cannot swap last element with its next
while (next != null)
{
// swap if items in wrong order
if (curr.name.compareTo(next.name) < 0)
{
// notify loop to do one more pass
swapped = true;
// swap elements (swapping head in special case
if (curr == head)
{
head = next;
Node temp = next.link;
next.link = curr;
curr.link = temp;
curr = head;
}
else
{
prev.link = curr.link;
curr.link = next.link;
next.link = curr;
curr = next;
}
}
// move to next element
prev = curr;
curr = curr.link;
next = curr.link;
}
}
}
Pour ce que ça vaut, je pense que le '<' dans la comparaison rendrait votre sorte aller dans l'ordre DESCENDANT. –
pouvez-vous donner un exemple de "ne pas trier entièrement les entrées"? - votre code de bubbleort semble OK –