recherche dichotomique d'entiers
This commit is contained in:
parent
72cb5439ac
commit
c082747db7
1 changed files with 48 additions and 0 deletions
48
src/dichotomie.py
Normal file
48
src/dichotomie.py
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
#encoding: utf-8
|
||||
|
||||
def search(value, tab):
|
||||
""" Cherche une valeur donnée au sein d'une liste d'entiers triée par ordre croissant """
|
||||
|
||||
vmin = 0
|
||||
vmax = len(tab)
|
||||
|
||||
# La recherche est terminée si la valeur min est supérieure à la valeur max.
|
||||
while vmin <= vmax:
|
||||
mid = vmin + (vmax - vmin) // 2;
|
||||
|
||||
# Si la valeur courante est inférieur à l'élément central,
|
||||
# reserrer la recherche.
|
||||
if value < tab[mid]:
|
||||
vmax = mid - 1;
|
||||
|
||||
# Si la valeur est supérieure aussi.
|
||||
elif value > tab[mid]:
|
||||
vmin = mid + 1;
|
||||
|
||||
# Sinon, c'est qu'on a trouvé.
|
||||
else:
|
||||
return mid;
|
||||
|
||||
# Si on arrive ici, l'élément n'est pas dans la liste
|
||||
return -1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
import random
|
||||
|
||||
size = 50
|
||||
# Construire une liste d'entiers croissants en prenant 75% des valeurs.
|
||||
t = [n for n in range(size) if random.random() < 0.75]
|
||||
# Tirer au hasard une valeur à chercher.
|
||||
v = random.randint(0,size-1)
|
||||
|
||||
print(t)
|
||||
print("L'élément", v, "...")
|
||||
|
||||
pos = search(v,t)
|
||||
if pos == -1:
|
||||
print("... n'a pas été trouvé dans la liste")
|
||||
else:
|
||||
print("... est à la position", pos )
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue