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

Comment trouver l'index d'un élément avec la recherche binaire en C ?

Mary-Kate Olsen
Libérer: 2024-10-24 04:32:31
original
844 Les gens l'ont consulté

How to Find Element Index with Binary Search in C  ?

Implémentation efficace de la recherche binaire en C

Trouver l'index ou l'itérateur d'un élément dans un conteneur trié est une opération fondamentale en C . Cependant, l'algorithme std::binary_search de la bibliothèque standard ne renvoie qu'un booléen indiquant l'existence de l'élément, pas sa position.

Considérons le cas où le conteneur est trié, et un algorithme de recherche binaire est préférable pour des raisons d'efficacité. . Une implémentation qui répond à ce besoin est requise.

Recherche binaire itérative personnalisée

Une approche consiste à implémenter un algorithme de recherche binaire itérative personnalisé. Voici un exemple d'implémentation :

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

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

Cet algorithme utilise std::lower_bound pour trouver efficacement l'itérateur pointant vers l'élément recherché. Si la valeur trouvée ne correspond pas à val, elle renvoie l'itérateur end().

Solutions alternatives

Une autre option consiste à utiliser un std::set, qui garantit l'ordre des éléments et fournit une méthode find(T key) qui renvoie un itérateur à l'élément donné. Cependant, cela peut ne pas convenir aux cas où des éléments en double sont requis.

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
Derniers articles par auteur
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!