/* * @program: TestSort.java * @auteur: felipe@dift1010 * @date: 10/04/2005 * * @objet: Test des tris de la classe Sort * @warning Ce programme ne compile qu'avec la jdk version 5 * Au departement: inclure jdk-1.5 * puis le reste est inchange * Si vous utilisez la jdk 1.4 (ou inferieure), utilisez le code * TestSort.java sur la page web du cours * * @note: C'est toujours une bonne idee de developper une classe de test * separemment de la classe que l'on desire tester * Ca permet par exemple ici de ne pas poluer le code de la classe Sort * avec le code de test * * @run javac SortTest.java * java SortTest 10000 BULLE */ import java.util.Date; // pour chronometrer les differents tris import static java.lang.System.out; // to avoid writing System.out.println, but out.println (well not much better indeed) import static java.lang.System.err; // to avoid writing System.out.println, but err.println (well not much better indeed) /** * Classe qui gere l'analyse de la ligne de commande, * qui lance les tests de la methode specifiee (sur la ligne de commande) * et qui affiche le temps d'execution */ public class SortTest { private enum SortMethods {Bulle, Fusion, Quick, Insertion, Selection, Quick2} /** * Affiche le synopsis du programme et arrete l'execution si exit est a true * @param exit arreter ou pas le programme une fois l'affichage du message fait */ static void error(boolean exit) { out.println("usage java SortTest [methode (QUICK)]\n" + "avec methode dans:\n" + " quick -> quick sort (pivot=1er element)\n" + " bulle -> tri a bulle\n" + " select -> tri par selection\n" + " insert -> tri par selection\n" + " fusion -> tri par fusion\n" + " quick2 -> quick sort (pivot=centre)"); if (exit) System.exit(0); } /** * @param s la taille du tableau (sous forme d'une string) * @return la valeur entiere associee a la chaine s * Analyse la taille demandee par l'utilisateur */ static int getTaille(String s) { int taille=0; try { // oubliez le try, catch taille = Integer.parseInt(s); } catch (NumberFormatException e) {error(true);} return taille; } /** * @param s la methode de tri (sous forme d'une string) * @return la valeur entiere associee a la chaine s * Analyse la chaine specifiee par l'utilisateur a la ligne de commande */ static SortMethods getMethode(String s) { if (s.equalsIgnoreCase("quick")) return SortMethods.Quick; if (s.equalsIgnoreCase("quick2")) return SortMethods.Quick2; if (s.equalsIgnoreCase("bulle")) return SortMethods.Bulle; if (s.equalsIgnoreCase("select")) return SortMethods.Selection; if (s.equalsIgnoreCase("insert")) return SortMethods.Insertion; if (s.equalsIgnoreCase("fusion")) return SortMethods.Fusion; err.println("Unkwnon methode. Assuming quicksort"); error(false); // warn but not stop return SortMethods.Quick; // The default } /** * @param method la methode de tri (enum) * @return la string associee a la methode */ static String getMethodeName(SortMethods method) { switch (method) { case Quick: return "Quick"; case Quick2: return "Quick2"; case Bulle: return "Bulle"; case Selection: return "Selection"; case Insertion: return "Insertion"; case Fusion: return "Fusion"; } return "Should never happen, but the compiler wants it"; } /** * @param t la reference sur le tableau * initialise t avec des valeurs positives dans [0,t.length()] */ static void alea (int [] t) { for (int i=0; i 0) { int [] tab = new int [taille]; // TEST1: init aleatoire du tableau, puis tri alea(tab); if (verbose) print("Avant:" ,tab); tri(tab,"aleatoire",method); if (verbose) print("Apres:",tab); // TEST 2: le tableau est trie, retrions le ! tri(tab,"trie",method); // TEST 3: le tableau est trie en ordre inverse, trions le ! for (int i=0; i 0 } // main } // class SortTest