Maison > développement back-end > C++ > le corps du texte

Comment implémenter un algorithme de recherche binaire en C qui renvoie l'emplacement de l'élément ?

DDD
Libérer: 2024-10-24 03:49:31
original
877 Les gens l'ont consulté

How to Implement a Binary Search Algorithm in C   That Returns the Element's Location?

Obtention d'un algorithme de recherche binaire C "utile"

Le C STL fournit un algorithme de recherche binaire, mais il renvoie uniquement un booléen indiquant si le l'élément existe. Pour les cas où l'emplacement exact de l'élément est requis, un algorithme plus complet est nécessaire.

Une option consiste à créer une fonction de recherche binaire personnalisée. Voici une implémentation simple :

<code class="cpp">template<class Iter, class T>
Iter binary_find(Iter begin, Iter end, T val) {
    // Find the lower bound in at most log(last - first) + 1 comparisons
    Iter i = std::lower_bound(begin, end, val);

    if (i != end && !(val < *i))
        return i; // found
    else
        return end; // not found
}</code>
Copier après la connexion

Une autre approche consiste à utiliser un std::set, qui ordonne automatiquement les éléments et fournit une méthode find(T key) qui renvoie un itérateur à l'élément. Cependant, cela peut ne pas convenir si les données peuvent contenir des valeurs en double.

Pour les situations où la vitesse est critique, il est important de profiter des avantages d'une recherche binaire. Les algorithmes Lower_bound et upper_bound peuvent être inadéquats lorsque l'élément n'existe pas, car ils peuvent ne pas renvoyer l'itérateur de fin. La fonction binaire_find fournie ci-dessus résout ce problème et garantit le comportement correct.

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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!