Sort

IPA - TD2

  1. Récupérer les fichiers de la version 1.
    Commenter le code.
    Ecrire une classe TestSort dans le paquetage par défaut pour tester les deux tris sur les chaînes de caractères passées en argument de la ligne de commande. (corrigé)

    Pour chacune des questions suivantes, proposer une solution, par exemple en utilisant la notation UML, puis implementer.

  2. Comment utiliser indifféremment différents algorithmes de tri ? (corrigé)
  3. Comment utiliser indifférement différents types de données, par exemple des tableaux ou des listes (java.util.List) ? En particulier, on s'assurera que ces données sont toujours comparables. Pourquoi est-il préférable de mettre les méthodes de comparaison finales ? (corrigé, diagramme)

    1. Comment pouvoir facilement modifier l'ordre d'un tri, par exemple croissant/décroissant, lexicographique pur/longueur + lexicographique ? Plus généralement, comment pouvoir trier des objets non comparables en fournissant une fonction de comparaison ? On regardera en particulier la classe java.util.Comparator<T>. (corrigé, diagramme)
    2. Rajouter des classes permettant de
      • combiner deux comparateurs pour effectuer un tri sur un objet composite,
      • fournir l'opposé d'un comparateur,
      • fournir un comparateur "trivial" sur des données comparables.
      Tester en fournissant une classe People représentant des personnes avec leur nom et prénom, et en les triant dans l'inverse de l'ordre alphabétique par nom puis par prénom. (corrigé)
  4. Rajouter une fonctionnalité de traçage du tri (affiche sur stdout les comparaisons et les échanges) et une fonctionnalité de statistique (compte les comparaisons et les échanges). (corrigé, diagramme)
  5. Comment simplifier l'utilisation du module à un client qui veut juste faire un tri rapide sur un tableau (par exemple) sans avoir à comprendre les classes comme SortableData ?
  6. Rajouter une fonctionnalité de visualisation du tri dans une fenêtre. On affichera les éléments à trier à l'aide de JLabel. L'affichage sera temporisé à l'aide de Thread.sleep(int t). Le paramètre t pourra être (dans un deuxième temps)  ajusté en utilisant un JSlider. Les deux méthodes de traçage (affichage sur stdout et visualisation graphique) seront implémentées en utilisant le modèle Observable/Observé (voir java.util.Observer et java.util.Observable). (corrigé sans WinTracer, diagramme)
  7. Modifier la méthode main de TestSort pour que l'algorithme de tri à utiliser soit précisé sur la ligne de commande (voir java.lang.Class).