Paulp ~, sweet ~ | slr56 a écrit :
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.
Code :
- /* déclaration des fichiers nécessaires*/
- #include <stdio.h>
- #include <stdlib.h>
- int tab[10];
- int compteur;
- int i,nb,nb2,taille;
- int main()
- {
- /* insertion des valeurs dans le tableau */
- for (compteur=1;compteur<11;compteur++)
- {
- printf("Saisissez la valeur numero %d : ", compteur);
- scanf("%d",&tab[compteur]);
- }
- /* tri des données*/
- for (i=1;i=10;i++)
- {
- nb=tab[i];
- if (tab[i]<nb)
- { nb=tab[i];
- nb2=nb;
- tab[i]=nb;
- }
- tab[i]=tab[i]+1;
- }
- /* affichage du contenu du tableau */
- for (compteur=1;compteur<11;compteur++)
- {
- printf("%d,%d",compteur,tab[compteur]);
- }
- }
|
|
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 :
- int main(){
- int tab[MAX];
- int tab_trie[MAX];
-
- acquisition(tab);
- tri(tab, tab_trie);
- affichage(tab_trie);
- }
|
Pour l'acquisition et l'affichage, tu gardes le même code
Pour le tri
Code :
- void tri(int tab[], int tab_trie[]){
- int length, i, min;
- for(length=MAX;length>0;length--){
- min = 32000; // Tu mets ici la valeur maximale !
- for(i=0;i<length;i++){
- if(tab[i]<min){
- min=tab[i];
- }
- }
- tab_trie[MAX-length]=min;
- }
- }
|
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. |