Précédent Remonter Suivant

5.3  Tris séquentiels

Dans la suite, on considère un dictionnaire de mots de quatre lettres.
#define taille_dico 979

/* Un dictionnaire de mots de quatre lettres */
char *dico[taille_dico] = { "drap", "nuee", "agit", "mais", "krak", "eric", 
     "aaai", "agir", "drop", "dome", "buis", "rode", "puce", "roda", "drue",
     "buse", "bure", "rode", "haie", "hais", "hait", "puer", "hall", "role",
     "halo", "haro", "puis", "hase", "decu", "pull", "vais", "puma", "haut",
     "valu", "vain", "vase", "alea", "vamp", "thon", "vaux", "vaut", "afin",
     "fier", "fief", "mica", "fiel", "thym", "fini", "midi", "epie", "meat",
     "mien", "fisc", "miel", "film", "mike", "feru", "tige", "mise", "epia",
     "tele", "fevr", "tien", "miss", "mile", "tint", "aout", "fetu", "tilt",
     "mita", "tenu", "mite", "agio", "agir", "agit", "mite", "fele", "ogre",
     "fela", "fele", "meme", "pres", "pref", "aere", "tete", "pret", "tetu",
     "hele", "hote", "here", "foin", "mode", "font", "foot", "moka", "fond",
     "fora", "fort", "toge", "todd", "mont", "mord", "mors", "fore", "mort",
     "four", "toit", "tond", "moto", "tors", "tort", "moue", "moud", "aout",
     "yvan", "tome", "tord", "mous", "yves", "tous", "toux", "flan", "tour",
     "tout", "oeil", "veau", "utah", "utah", "flou", "flot", "heur", "vend",
     "venu", "vent", "velu", "oeuf", "vers", "vert", "flux", "veto", "veuf",
     "veut", "veux", "hale", "hale", "etal", "etai", "etat", "etau", "hata",
     "hate", "ores", "have", "buee", "hate", "jusa", "hair", "etui", "aire",
     "frac", "frai", "fret", "trie", "cade", "tram", "fris", "frit", "froc",
     "cage", "cadi", "trac", "duel", "jade", "cake", "tria", "cane", "dune",
     "camp", "trio", "dura", "cafe", "troc", "mole", "came", "trot", "jais",
     "rude", "trop", "trou", "aine", "ruer", "janv", "tole", "jase", "jars",
     "jasa", "dure", "truc", "java", "jazz", "jase", "rush", "tsar", "epee",
     "clot", "aile", "aigu", "aide", "aine", "hele", "hier", "aile", "vice",
     "vecu", "aise", "aera", "hela", "vint", "viol", "aise", "visa", "vise",
     "aere", "hetu", "vive", "vite", "velo", "ange", "once", "vise", "anis",
     "anon", "onde", "anse", "ansi", "anus", "onze", "cene", "vetu", "onyx",
     "cepe", "hors", "home", "ceci", "houx", "vois", "voir", "voit", "voeu",
     "voix", "cout", "houe", "voie", "volt", "vont", "jean", "coit", "cens",
     "alfa", "cent", "allo", "vote", "vous", "cerf", "cern", "aloi", "jerk",
     "ceux", "jeun", "alto", "vlsi", "amas", "amen", "amer", "ames", "omet",
     "omis", "omit", "arcs", "caid", "oral", "orge", "vrac", "vrai", "fuel",
     "ardu", "ardt", "fuit", "chas", "char", "orme", "aria", "chef", "hote",
     "laid", "sage", "lait", "land", "muni", "tuer", "mule", "lama", "lard",
     "ores", "laps", "turc", "turf", "lame", "fuir", "chai", "chah", "sapa",
     "chat", "mure", "muer", "muet", "full", "sake", "cher", "chez", "saga",
     "saur", "oser", "chic", "tuez", "lame", "choc", "chou", "mura", "musc",
     "muse", "sain", "sais", "sait", "sana", "sang", "sans", "sali", "apex",
     "fute", "sari", "sape", "chut", "sauf", "saut", "sape", "osez", "saxo",
     "jill", "ciel", "cinq", "cime", "opus", "apre", "opte", "apte", "opta",
     "opte", "aval", "cola", "john", "lese", "jonc", "joli", "cote", "coco",
     "tres", "coke", "coin", "conf", "seau", "colt", "seme", "coma", "avec",
     "aveu", "avez", "corp", "joie", "cosy", "clip", "avis", "seme", "lest",
     "sein", "coud", "coup", "cour", "sens", "sent", "self", "sera", "serf",
     "seve", "sers", "zele", "sert", "cote", "type", "joug", "typo", "jour",
     "auto", "ubac", "ovni", "owen", "legs", "clam", "clan", "clef", "aube",
     "lent", "clin", "soul", "clos", "clou", "sema", "leur", "sept", "club",
     "seul", "type", "sexe", "sexy", "skie", "ucla", "crue", "atre", "gain",
     "huit", "gang", "hune", "gala", "gale", "naja", "html", "cote", "nain",
     "cran", "shah", "laic", "aube", "cric", "crin", "cris", "croc", "auge",
     "skia", "cone", "audy", "aune", "huer", "crut", "aura", "cote", "gant",
     "oued", "lice", "auto", "gars", "nais", "lift", "lien", "ours", "nasa",
     "lion", "sied", "nazi", "lira", "lire", "zebu", "lise", "lisp", "show",
     "zele", "lesa", "zinc", "zero", "azur", "lied", "lier", "lieu", "lino",
     "sien", "snob", "silo", "sire", "site", "lese", "oree", "gene", "sofa",
     "loin", "loir", "long", "lors", "soif", "axer", "soir", "ieee", "ayez",
     "zone", "sole", "soli", "sors", "loup", "zona", "zone", "zoom", "gout",
     "noel", "souk", "soya", "mans", "gere", "soda", "soja", "neuf", "soin",
     "soit", "ieee", "sono", "sont", "ibid", "ibis", "geai", "solo", "slip",
     "loto", "sort", "slow", "gens", "nerf", "elle", "nait", "naif", "ouie",
     "ouir", "cube", "erra", "bail", "bain", "cuir", "gata", "gate", "judo",
     "pack", "jube", "gate", "page", "juin", "pane", "quel", "jury", "jupe",
     "paon", "cure", "pars", "paru", "baba", "cuba", "paul", "gite", "watt",
     "erre", "apic", "cube", "cuis", "cuit", "banc", "bang", "jude", "quai",
     "cure", "basa", "base", "juif", "erre", "cuti", "baud", "baux", "pain",
     "pair", "paix", "quoi", "pale", "base", "jute", "parc", "pari", "part",
     "papa", "pape", "neon", "pays", "esse", "gere", "spie", "spot", "neve",
     "gena", "nier", "girl", "unir", "unit", "unix", "gera", "noce", "gond",
     "hifi", "gene", "pere", "noir", "noix", "gnon", "nord", "gene", "nous",
     "ieee", "peau", "idem", "ides", "pend", "goal", "perd", "perl", "pers",
     "peur", "peut", "ebat", "gong", "golf", "pese", "pese", "beau", "pame",
     "glas", "pale", "pama", "pame", "ilot", "pate", "pesa", "stem", "echo",
     "echu", "pate", "ecot", "swap", "ecru", "gras", "bale", "stuc", "grog",
     "gros", "urge", "bati", "daim", "luge", "atil", "race", "dame", "urne",
     "etes", "rame", "luit", "suez", "luxe", "kart", "etre", "star", "raid",
     "suce", "suif", "rail", "suis", "suit", "suiv", "rang", "luth", "rare",
     "surf", "phil", "stop", "yard", "grec", "greg", "user", "gril", "gris",
     "beat", "dada", "dais", "lune", "grue", "kaki", "pied", "dard", "pieu",
     "daze", "lune", "urge", "yack", "suer", "lump", "race", "suie", "rama",
     "rame", "rami", "rapt", "luxa", "luxe", "rave", "rata", "rate", "indu",
     "usez", "bien", "pneu", "beer", "bebe", "bile", "bise", "pige", "exil",
     "pion", "egal", "pire", "pipe", "inca", "pise", "boxe", "idee", "inne",
     "ions", "pois", "poix", "inox", "pool", "poli", "dela", "insu", "port",
     "beta", "bete", "pope", "edam", "pene", "pouf", "pour", "poux", "bock",
     "edit", "kent", "rein", "bois", "boit", "bond", "boni", "plan", "iode",
     "boom", "bord", "iode", "bouc", "boue", "boul", "bous", "bout", "poil",
     "pond", "pont", "boxa", "boxe", "polo", "iota", "porc", "pore", "yeux",
     "plut", "dent", "demi", "bleu", "blet", "rene", "lynx", "bloc", "lyre",
     "lyse", "deux", "rala", "rale", "rend", "plat", "utah", "plot", "elle",
     "suca", "bref", "irai", "imbu", "rale", "irez", "iris", "fame", "irmx",
     "guet", "pris", "prit", "prix", "imsl", "tact", "nuit", "malt", "mare",
     "mari", "taie", "tain", "bras", "tank", "taon", "talc", "ntsc", "maux",
     "bric", "brie", "item", "brio", "brin", "bris", "broc", "brou", "taux",
     "face", "unir", "fade", "fane", "irmx", "mach", "brun", "brut", "rhum",
     "deja", "faim", "mage", "fais", "fait", "fana", "fane", "unir", "faon",
     "uucp", "pole", "fard", "fart", "mail", "main", "dine", "khan", "marc",
     "mark", "mars", "isba", "faut", "dina", "faux", "dine", "tais", "tait",
     "tant", "dery", "rien", "dime", "riez", "kilt", "math", "ture", "tard",
     "reel", "tapi", "ring", "maya", "rira", "rire", "tare", "taxi", "issu",
     "dick", "rite", "defi", "dieu", "deni", "dira", "dire", "dise", "rime",
     "king", "kilo", "dito", "reer", "kiwi", "rima", "kepi", "rime", "uree",
     "dois", "donc", "rock", "rixe", "dors", "dose", "kola", "dota", "acte",
     "rond", "roll", "dose", "gres", "ivre", "rene", "dock", "fend", "roux",
     "teck", "dodu", "mens", "ment", "deca", "doit", "abat", "feue", "dont",
     "recu", "tend", "feve", "tenu", "dort", "dosa", "abbe", "meus", "meut",
     "test", "doux", "yoga", "abus", "abri", "dote", "doue", "rose", "abus",
     "elan", "roue", "mout", "fera", "rose", "ocre", "roue", "menu", "elit",
     "elis", "elle", "obus", "mess", "male", "elue", "elut", "acre", "acre",
     "acte", "emet", "emit", "emir", "emis", "emoi", "item", "oter", "emue",
     "emut" }; 
 
Ce dictionnaire est stocké dans une variable globale et on se propose de le trier.

Pour ce faire, on rappelle qu'il est possible de comparer deux chaînes de caractères en utilisant la fonction strcmp dont la déclaration est dans string.h (pour plus de détails, man strcmp).

5.3.1  Tri par sélection

L'algorithme de tri le plus simple consiste à trouver l'emplacement du plus petit éléments dans la table considérée. Une fois cet emplacement trouvé, on échange le premier élément de la table avec le plus petit. Pour continuer, on recommence ces opérations sur la table composée des éléments restant.




Exercice 5.7 --- Tri par sélection.


Implantez le tri par sélection de la table dico. Pour ce faire, construisez une fonction principale et deux fonctions auxiliaires (recherche du plus petit élément et tri).
Étude de la complexité.
À chaque itération i, on compare l'élément i à l'élément classé après lui. Si t représente la taille de la table, on fait donc t-i comparaisons. Comme il y a t itérations, on a t(t-1)/2 comparaisons et n-1 échanges. La complexité est donc de l'ordre de t2.


5.3.2  Tri bulle




Exercice 5.8 --- Tri bulle.


Le tri bulle consiste à parcourir la table à trier en intervertissant toute paire d'éléments consécutifs non ordonnés afin qu'après un parcours, le plus grand élément se retrouve à la fin de la table. On recommence cette opération avec la table considérée sans le dernier éléments.

Implantez un tri bulle.


5.3.3  Tri par insertion




Exercice 5.9 --- Tri par insertion.


Dans la méthode du tri par insertion, on ordonne les deux premiers éléments de la table. Puis, on considère le troisième et on le met à sa place parmi les deux premiers. Ainsi, on considère les j-1 premiers éléments de la table comme triés. On prend la jième et on le met à sa place dans la partie déjà triée.


5.3.4  Tri Shell




Exercice 5.10 --- Tri Shell.


Une variante du tri par insertion a été introduite par D.L. Shell en 1959. Le principe est de supposer que la table à trier est presque en ordre. Au lieu de comparer les éléments adjacents pour l'insertion, on les compares tous les un éléments avec un+1=3un+1.

Implantez un tri shell.






Pour tout commentaire : Alexandre Sedoglavic.
Précédent Remonter Suivant