def binary_search(arr, target):
low, high = 0, len(arr) - 1
steps = 0 # to see how many iterations happen
while low <= high:
steps += 1
mid = (low + high) // 2
if arr[mid] == target:
print(f"Found in {steps} steps")
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
print(f"Not found in {steps} steps")
return -1
# Sorted array
arr = list(range(1, 1000000))
binary_search(arr, 876543)
ZGVmIGJpbmFyeV9zZWFyY2goYXJyLCB0YXJnZXQpOgogICAgbG93LCBoaWdoID0gMCwgbGVuKGFycikgLSAxCiAgICBzdGVwcyA9IDAgICMgdG8gc2VlIGhvdyBtYW55IGl0ZXJhdGlvbnMgaGFwcGVuCiAgICB3aGlsZSBsb3cgPD0gaGlnaDoKICAgICAgICBzdGVwcyArPSAxCiAgICAgICAgbWlkID0gKGxvdyArIGhpZ2gpIC8vIDIKICAgICAgICBpZiBhcnJbbWlkXSA9PSB0YXJnZXQ6CiAgICAgICAgICAgIHByaW50KGYiRm91bmQgaW4ge3N0ZXBzfSBzdGVwcyIpCiAgICAgICAgICAgIHJldHVybiBtaWQKICAgICAgICBlbGlmIGFyclttaWRdIDwgdGFyZ2V0OgogICAgICAgICAgICBsb3cgPSBtaWQgKyAxCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDEKICAgIHByaW50KGYiTm90IGZvdW5kIGluIHtzdGVwc30gc3RlcHMiKQogICAgcmV0dXJuIC0xCgojIFNvcnRlZCBhcnJheQphcnIgPSBsaXN0KHJhbmdlKDEsIDEwMDAwMDApKQpiaW5hcnlfc2VhcmNoKGFyciwgODc2NTQzKQo=