Tri par insertion - C - Programmation
Marsh Posté le 23-06-2008 à 18:31:16
euh tu sais qu'en C les indices commencent à partir de 0 ?
Marsh Posté le 23-06-2008 à 18:33:32
slr56 a écrit : Bonjour,
|
Première chose : tu déclares int tab[10], donc tu pourras utiliser tab[0] à tab[9] => revoir la condition ligne 13
De plus, tu gagnerais à faire un #define MAX 10 et à utiliser MAX à chaque fois, ce qui te permet de le changer en une seule fois.
Enfin, tu gagnerais à séparer ton programme en fonctions :
- acquisition des valeurs
- tri
- affichage
Ta fonction main devient :
Code :
|
Pour l'acquisition et l'affichage, tu gardes le même code
Pour le tri
Code :
|
Ca fait un moment que j'ai pas fait de C, mais ça devrait marcher ...
En fait tu es obligé de passer par un deuxième tableau (au moins temporairement dans ta fonction de tri) pour ne pas écraser les valeurs à trier.
Marsh Posté le 23-06-2008 à 22:35:34
Là j'ai comme un doute : je suis le seul à utiliser le tri par insertion et en ajoutant les éléments un par un au fur et à mesure qu'ils arrivent ?
Sinon on n'est pas obligé d'utiliser un deuxième tableau si on trie d'un coup, il suffit de séparer le tableau en deux parties : la première qui est déjà triée (elle contient un seul élément au départ) et la deuxième qui contient le reste.
Code :
|
Marsh Posté le 24-06-2008 à 11:20:04
dap++ a écrit : Là j'ai comme un doute : je suis le seul à utiliser le tri par insertion et en ajoutant les éléments un par un au fur et à mesure qu'ils arrivent ?
|
Ma version évite les insertions qui sont assez couteuses dans les tableaux. Je pense qu'elle est plus efficace en terme de complexité
A noter qu'on peut ajouter à ta méthode (enfin, pas pour MAX = 10, ce serait assez con) une recherche dichotomique pour la place de l'élément à insérer.
On peut aussi dans ma méthode afficher les éléments au fur et à mesure où ils sont triés, ça évite une boucle.
Marsh Posté le 23-06-2008 à 18:10:34
Bonjour,
je dois faire un tri de nombres, saisis par l'utilisateur, en utilisant la méthode par insertion. Je les tris par ordre croissant.
J'ai compris le principe de cette méthode :
l'utilisateur rempli le tableau
on trouve le plus petit
on le met à la première place
ensuite on réduit la taille du tableau de "1"
on trouve le plus petit nombre et on le met a la première place de la nouvelle taille.
Ainsi de suite jusqu'au dernier.
Voila ce que j'ai fait cependant je ne vois pas comment réduit la taille du tableau au fur et à mesure que "j'avance" dans le tableau. Faut-il faire une boucle dans la boucle? J'aurais tendance à penser ça mais je ne suis pas sûr. merci de m'aider.
Message édité par slr56 le 23-06-2008 à 18:12:34