| 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)) | |
| 
 |