import java.util.LinkedList; import java.util.Queue; public class BullesQueue { /** * Effectue un parcours (bulle) dans une file. * * @param source La file source contenant les entiers à trier. * @param destination La file destination pour stocker le résultat du parcours. * @return true si l'ordre des valeurs a changé, false sinon. */ public static boolean bulle(Queue source, Queue destination) { boolean changed = false; if (source.isEmpty()) { return false; } int prev = source.poll(); // Récupère le premier élément while (!source.isEmpty()) { int current = source.poll(); if (prev > current) { // Si les éléments ne sont pas dans l'ordre croissant changed = true; destination.add(current); prev = prev; // L'ordre change } else { destination.add(prev); // Ajoute directement dans l'ordre prev = current; } } destination.add(prev); // Ajoute le dernier élément return changed; } /** * Trie complètement une file d'entiers en utilisant la méthode bulle. * * @param file La file d'entiers à trier. */ public static void tri(Queue file) { Queue intermediaire = new LinkedList<>(); boolean changed; do { changed = bulle(file, intermediaire); // Effectue un parcours // Inverse les files Queue temp = file; file = intermediaire; intermediaire = temp; } while (changed); // Affiche les valeurs triées while (!file.isEmpty()) { System.out.print(file.poll() + " "); } System.out.println(); } public static void main(String[] args) { // Exemple d'utilisation avec des entiers passés en ligne de commande Queue file = new LinkedList<>(); for (String arg : args) { file.add(Integer.parseInt(arg)); } // Trie la file et affiche le résultat tri(file); } }