def recherche_dichotomique(li, c):
    """
    Effectue une recherche dichotomique.

    @param  li      tableau
    @param  c       élément à chercher
    @return         position

    .. exref::
        :tag: Base
        :title: recherche dichotomique

        La `recherche dichotomique <http://fr.wikipedia.org/wiki/Dichotomie>`_
        est plus rapide qu'une recherche classique mais elle
        suppose que celle-ci s'effectue dans un ensemble trié.
        L'idée est de couper en deux l'intervalle de recherche à chaque itération.
        Comme l'ensemble est trié, en comparant l'élément cherché à l'élément central,
        on peut éliminer une partie de l'ensemble : la moitié inférieure ou supérieure.

        .. runpython::
            :showcode:

            def recherche_dichotomique(li, c) :
                a, b = 0, len (li)-1
                while a <= b :
                    m = (a + b)//2
                    if   c == li[m]: return m
                    elif c <  li[m]: b = m-1
                    else           : a = m+1
                return -1

            print(recherche_dichotomique([0, 2, 5, 7, 8], 7))
    """
    a, b = 0, len(li) - 1
    while a <= b:
        m = (a + b) // 2
        if c == li[m]:
            return m
        elif c < li[m]:
            b = m - 1
        else:
            a = m + 1
    return -1
