|
@ -0,0 +1,39 @@ |
|
|
|
|
|
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)) |
|
|
|
|
|
|