# -*- coding: utf-8 -*-
"""
Created on Fri Jan 10 23:58:46 2014

@author: dconduche
"""

def DichoListe(L,elem): # Recherche la présence d'un élément dans une liste triée
                    # L: liste (supposée triée)
                    # elem : élément cherché
    a=0         #indice de début de liste
    b=len(L)-1  #indice de fin de liste
    while b-a>0:
        m=(a+b+1)//2
        if L[m]<=elem:
            a=m     #elem est situé entre les indices m et b
        else:
            b=m-1   #elem est situé entre les indices a et m-1
    return L[b]==elem

def DichoListeIndice(L,elem): # Recherche la présence d'un élément dans une liste triée : retourne le plus grand indice de l'élément ou -1 s'il n'est pas dedans
                              # CETTE FONCTION EST LA MEME QUE LA PRECEDENTE, au return près
                    # L: liste (supposée triée)
                    # elem : élément cherché
    a=0         #indice de début de liste
    b=len(L)-1  #indice de fin de liste
    while b-a>0:
        m=(a+b+1)//2
        if L[m]<=elem:
            a=m     #elem est situé entre les indices m et b
        else:
            b=m-1   #elem est situé entre les indices a et m-1
    if L[b]==elem:
        return b
    else:
        return -1

# Test :
M=list(range(10))
for i in [5.4,-2,10,3]:
    print('recherche de '+str(i)+ " dans la liste: "+str(DichoListe(M,i)))
for i in [0,1,2,4]:
    print('recherche de '+str(i)+ " dans la liste: "+str(DichoListeIndice(M,i)))
