Pincer la recherche binaire

teneur

Tout d'abord, le principe de réalisation

2. Analyse graphique

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! ! ! !

Je suppose que tu aimes

Origine blog.csdn.net/qq_52763385/article/details/122015217
conseillé
Classement