teneur
Tout d'abord, le principe de réalisation
3. Mise en œuvre de la programmation
Tout d'abord, le principe de réalisation
lemme:
Je crois que tout le monde a joué à un tel jeu, en devinant le jeu des nombres.
Règles du jeu : écrivez au hasard un nombre entre 1 et 100, laissez-nous deviner le nombre, l'arbitre demandera à chaque fois que vous devinez, si la supposition est correcte, la relation entre le nombre deviné et le nombre deviné.
Par exemple : écrire un 56
Première estimation : devinez 50 Indice : moins que le nombre deviné
Deuxième estimation : devinez 75 Indice : plus grand que le nombre deviné
La troisième supposition : devinez 62 Indice : plus grand que le nombre deviné
Quatrième supposition : devinez 56 Indice : devinez juste
La méthode de recherche ci-dessus utilise la recherche binaire, comprenez-vous ?
C'est ça! ! !
Exigences pour la recherche binaire : le tableau à rechercher est ordonné
2. Analyse graphique
Exemple : Il existe un tel tableau, comme illustré ci-dessous.
Nous comparons d'abord la clé (nombre à vérifier) avec le nombre de arr[mid].
Si Key==arr[mid], alors trouvé.
Si Key>arr[mid], cela signifie que le numéro recherché peut être compris entre [mid+1,right]
Si Key<arr[mid], le nombre à rechercher peut être compris entre [left, mid-1]
Ensuite, dans le tableau ci-dessus, recherchons Key=9
Première recherche :
milieu=(gauche+droite)/2
arr[moyen]<Clé
left=mid+1;//Modifier l'intervalle de recherche
Deuxième recherche :
milieu=(gauche+droite)/2
arr[mid]>Touche
right=mid-1//Modifier l'intervalle de recherche
Troisième recherche :
milieu=(droite+milieu)/2
arr[mid]==Clé
La recherche est terminée.
Exemple 2 : Je veux trouver 18 à l'intérieur
Première recherche :
milieu=(gauche+droite)/2
arr[moyen]<Clé
gauche=milieu+1 ;
Deuxième recherche :
milieu=(gauche+droite)/2
arr[moyen]<Clé
gauche=milieu+1 ;
Troisième recherche :
milieu=(droite+gauche)/2
arr[moyen]<Clé
gauche=milieu+1
Quatrième recherche :
milieu=(gauche+droite)/2
Touche>arr[moyen]
gauche=milieu+1
On voit gauche>droite donc faut-il continuer à chercher ?
Bien sûr que non, parce que le tableau est ordonné, il n'y a pas de nombre supérieur à gauche de gauche et à droite de droite, donc il n'y a pas un tel nombre dans ce tableau.
Pensez-vous que c'est très simple à voir ici? Facile!!!
3. Mise en œuvre de la programmation
//找到了返回数组下标,找不到返回-1
int BinarySearch(int *arr,int Key,int n){
int left=0;
int right=n-1;
while(left<=right){//left>right则找不到,
int mid=(right+left)/2;//中间数
if(arr[mid]==Key)
return mid;
else if(arr[mid]<Key)//条件成立查找区间改变到[mid+1,right]
left=mid+1;
else
right=mid-1;//否则查找区间改变到[left,mid-1]
}
return -1;//找不到返回-1
}
Je ne suis pas doué, ne le vaporisez pas, vous pouvez laisser un peu d'amour si vous comprenez.
Au revoir! ! ! !