import math
|
|
|
|
def jumpSearch( arr , x ):
|
|
# Finding block size to be jumped
|
|
n = len(arr)
|
|
step = math.sqrt(n)
|
|
|
|
# Finding the block where element is
|
|
# present (if it is present)
|
|
prev = 0
|
|
while arr[int(min(step, n)-1)] < x:
|
|
prev = step
|
|
step += math.sqrt(n)
|
|
if prev >= n:
|
|
return -1
|
|
|
|
# Doing a linear search for x in
|
|
# block beginning with prev.
|
|
while arr[int(prev)] < x:
|
|
prev += 1
|
|
|
|
# If we reached next block or end
|
|
# of array, element is not present.
|
|
if prev == min(step, n):
|
|
return -1
|
|
|
|
# If element is found
|
|
if arr[int(prev)] == x:
|
|
return int(prev)
|
|
|
|
return -1
|
|
|
|
|
|
arr = [ 0, 1, 3, 4, 4, 5, 8, 13, 22, 24, 55, 59, 122, 213, 422, 555 ]
|
|
x = 55
|
|
|
|
index = jumpSearch(arr, x)
|
|
print("Number is at index {}".format(index))
|
|
|