The Wayback Machine - https://web.archive.org/web/20200914221109/https://github.com/TheAlgorithms/Python/pull/2415/files
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jump search #2415

Merged
merged 10 commits into from Sep 12, 2020
@@ -1,7 +1,28 @@
"""
Pure Python implementation of the jump search algorithm.
This algorithm iterates through a sorted collection with a step of n^(1/2),
until the element compared is bigger than the one searched.
It will then perform a linear search until it matches the wanted number.
If not found, it returns -1.
"""

import math


def jump_search(arr, x):
def jump_search(arr: list, x: int) -> int:

This comment has been minimized.

@ruppysuppy

ruppysuppy Sep 11, 2020

Contributor
Suggested change
def jump_search(arr: list, x: int) -> int:
def jump_search(arr: List[int], x: int) -> int:

First import List from typing

This comment has been minimized.

@cclauss

cclauss Sep 11, 2020

Member

This limits us to only the int data type. Without this specificity, would the algorithm work with strings, tuples, floats?

"""
Pure Python implementation of the jump search algorithm.
Examples:
>>> jump_search([0, 1, 2, 3, 4, 5], 3)
3
>>> jump_search([-5, -2, -1], -1)
2
>>> jump_search([0, 5, 10, 20], 8)
-1

This comment has been minimized.

@cclauss

cclauss Sep 11, 2020

Member

I tend to like to raise an exception like str.index() vs str.find() but that is a personal choice.

>>> jump_search([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610], 55)
10
"""

n = len(arr)
step = int(math.floor(math.sqrt(n)))
prev = 0
@@ -21,6 +42,11 @@ def jump_search(arr, x):


if __name__ == "__main__":
arr = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
x = 55
print(f"Number {x} is at index {jump_search(arr, x)}")
user_input = input("Enter numbers separated by a comma:\n").strip()
arr = [int(item) for item in user_input.split(",")]
x = int(input("Enter the number to be searched:\n"))
res = jump_search(arr, x)
if res == -1:
print("Number not found!")
else:
print(f"Number {x} is at index {res}")
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.