![]() |
Auteur : Severance Créé : le 26/07/2006 07:28:45 Modifié : le 24/05/2008 11:55:54 Noter et commenter ce tutoriel Imprimer ce tutoriel |
) sur lequel je ne vais pas m'éterniser car j'ai mis les explications nécessaires dans le code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <iostream> using namespace std; int main() { int val, nbVal; bool trouve, depasse; int tab[10] = {12, 14, 20, 25, 26, 28, 35, 99}; //tableau d'entiers trié par ordre croissant nbVal = 8; //nombre de valeurs stockées dans le tableau cout << "Entrez la valeur que vous voulez rechercher dans le tableau." << endl; cin >> val; int i=0; trouve=false; depasse = false; while(i<nbVal && !(trouve || depasse)){ //on s'arrête si on trouve ou si on dépasse (car ordre croissant donc si on n'a pas trouvé avant, on ne trouvera pas après) trouve = (tab[i] == val); depasse = (tab[i] > val); i++; } if(trouve) cout << "La valeur est bien dans le tableau à l'indice : " << i << endl; else cout << "La valeur n'est pas dans le tableau" << endl; return 0; } |
) et d'autre part, je répète ce que j'ai dit plus haut : la recherche dichotomique peut s'appliquer également sur des objets qui peuvent être beaucoup plus gros que des entiers (et là, les 9999 comparaisons, avec la recherche séquentielle, tu les sens passer, mon gars
).1 | int tab[10] = {12, 14, 20, 25, 26, 28, 35, 99}; |
) :
Eh bien en fait, elle renverra une valeur spéciale, et pour ne pas compliquer la chose, on va admettre qu'elle renverra -1, puisque l'on suppose que toutes nos valeurs sont positives ou nulles.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /* fonction de recherche dichotomique qui renvoie un indice où se trouve la valeur "val" si elle est dans le tableau "tab[]" et -1 si cette valeur n'y est pas */ int rechercheDicho(int tab[], int nbVal, int val){ /* déclaration des variables locales à la fonction */ bool trouve; //vaut faux tant que la valeur "val" n'aura pas été trouvée int id; //indice de début int ifin; //indice de fin int im; //indice de "milieu" /* initialisation de ces variables avant la boucle de recherche */ trouve = false; //la valeur n'a pas encore été trouvée id = 0; //intervalle de recherche compris entre 0... ifin = nbVal; //...et nbVal /* boucle de recherche */ while(!trouve && ((ifin - id) > 1)){ im = (id + ifin)/2; //on détermine l'indice de milieu trouve = (tab[im] == val); //on regarde si la valeur recherchée est à cet indice if(tab[im] > val) ifin = im; //si la valeur qui est à la case "im" est supérieure à la valeur recherchée, l'indice de fin "ifin" << devient >> l'indice de milieu, ainsi l'intervalle de recherche est restreint lors du prochain tour de boucle else id = im; //sinon l'indice de début << devient >> l'indice de milieu et l'intervalle est de la même façon restreint } /* test conditionnant la valeur que la fonction va renvoyer */ if(tab[id] == val) return(id); //si on a trouvé la bonne valeur, on retourne l'indice else return(-1); //sinon on retourne -1 } |
):1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <iostream> using namespace std; int rechercheDicho(int [], int, int); //prototype de la fonction de recherche dichotomique int main() { /* on déclare un tableau d'entiers que l'on initialise avec 8 entiers rangés par ordre croissant */ int tab[10] = {12, 14, 20, 25, 26, 28, 35, 99}; int nbVal = 8; //nombre de valeurs stockées dans le tableau "tab[]" /* on demande la valeur que l'utilisateur veut rechercher dans le tableau */ int val; //variable stockant la valeur à rechercher dans le tableau cout << "Quelle valeur voulez-vous rechercher ?" << endl; cin >> val; /* on appelle la fonction de recherche dichotomique et on affiche le résultat */ int indiceRetourne = rechercheDicho(tab, nbVal, val); if(indiceRetourne != -1) cout << "Votre valeur est a l'indice : " << indiceRetourne << endl; else cout << "Votre valeur n'est pas dans le tableau." << endl; return 0; } /* fonction de recherche dichotomique qui renvoie un indice où se trouve la valeur "val" s'il est dans le tableau "tab[]" et -1 si cette valeur n'y est pas */ int rechercheDicho(int tab[], int nbVal, int val){ /* déclaration des variables locales à la fonction */ bool trouve; //vaut faux tant que la valeur "val" n'aura pas été trouvée int id; //indice de début int ifin; //indice de fin int im; //indice de "milieu" /* initialisation de ces variables avant la boucle de recherche */ trouve = false; //la valeur n'a pas encore été trouvée id = 0; //intervalle de recherche compris entre 0... ifin = nbVal; //...et nbVal /* boucle de recherche */ while(!trouve && ((ifin - id) > 1)){ im = (id + ifin)/2; //on détermine l'indice de milieu trouve = (tab[im] == val); //on regarde si la valeur recherchée est à cet indice if(tab[im] > val) ifin = im; //si la valeur qui est à la case "im" est supérieure à la valeur recherchée, l'indice de fin "ifin" << devient >> l'indice de milieu, ainsi l'intervalle de recherche est restreint lors du prochain tour de boucle else id = im; //sinon l'indice de début << devient >> l'indice de milieu et l'intervalle est de la même façon restreint } /* test conditionnant la valeur que la fonction va renvoyer */ if(tab[id] == val) return(id); //si on a trouvé la bonne valeur, on retourne l'indice else return(-1); //sinon on retourne -1 } |
1 | cout << im << endl; |
Quelle valeur voulez-vous rechercher ? 99 4 6 7 Votre valeur est a l'indice : 7 |
Allez, à vous de jouer !
).
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
Fil RSS |
XHTML 1.0 |
CSS 2.0
Édité par Simple IT SARL :
Nous contacter
| Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
431 Zéros connectés |
7 requêtes |
0.0189s (0.0077s)