Maison > Article > développement back-end > Exemple de code de recherche binaire PHP pour les implémentations récursives et non récursives
La
Recherche binaire, également connue sous le nom de demi-recherche, présente l'avantage de moins de comparaisons, une vitesse de recherche rapide et de bonnes performances moyennes. Son inconvénient est que la table à rechercher doit être ordonnée ; table, et insertionsupprimerDifficile. Par conséquent, la méthode de recherche binaire convient aux listes ordonnées qui ne changent pas fréquemment mais sont fréquemment recherchées. Tout d'abord, en supposant que les éléments du tableau sont classés par ordre croissant, comparez le mot-clé enregistré en position médiane du tableau avec le mot-clé de recherche. Si les deux sont égaux, la recherche réussit, sinon utilisez l'enregistrement en position médiane pour. divisez le tableau en deux sous-tableaux, le premier et le dernier. Si Si le mot-clé enregistré en position médiane est supérieur au mot-clé de recherche, alors le sous-tableau précédent sera recherché plus loin, sinon le sous-tableau suivant sera recherché plus loin. Répétez le processus ci-dessus jusqu'à ce qu'un enregistrement répondant aux conditions soit trouvé, ce qui rend la recherche réussie, ou jusqu'à ce que la sous-table n'existe plus, auquel cas la recherche échoue.
L'idée de base de la recherche binaire est de diviser n éléments en deux parties à peu près égales, comparer a[n/2] avec x, si x=a[n/2], trouver x, algorithme Abandonner ; si xrechercher x dans la moitié gauche du tableaua, si recherchez x dans la moitié droite du tableau a.
Ce qui suit est l'exemple de code
// 递归二分查找 $arr = [1,2,3,4,11,12,124,1245]; function bin_recur_find($arr, $beg, $end, $v) { if ($beg <= $end) { $idx = floor(($beg + $end)/2); if ($v == $arr[$idx]) { return $idx; } else { if ($v < $arr[$idx]) { return bin_recur_find($arr, $beg, $idx - 1, $v); } else { return bin_recur_find($arr, $idx + 1, $end, $v); } } } return -1; } // 非递归二分查找 function bin_find($arr, $v) { $beg = 0; $end = count($arr) - 1; while ($beg <= $end) { $idx = floor(($beg + $end)/2); if ($v == $arr[$idx]) { return $idx; } else { if ($v < $arr[$idx]) { $end = $idx - 1; } else { $beg = $idx + 1; } } } return -1; } echo bin_recur_find($arr, 0, count($arr) - 1, 100) . "\n"; echo bin_find($arr, 100) . "\n";
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!