From d2e77b05ef5983c3f0a7791550aac01b645a07ee Mon Sep 17 00:00:00 2001 From: Kelvin Salton do Prado Date: Tue, 2 Oct 2018 00:08:42 -0300 Subject: [PATCH] searches: add sentinel linear search algorithm --- searches/sentinel_linear_search.py | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 searches/sentinel_linear_search.py diff --git a/searches/sentinel_linear_search.py b/searches/sentinel_linear_search.py new file mode 100644 index 000000000..336cc5ab3 --- /dev/null +++ b/searches/sentinel_linear_search.py @@ -0,0 +1,62 @@ +""" +This is pure python implementation of sentinel linear search algorithm + +For doctests run following command: +python -m doctest -v sentinel_linear_search.py +or +python3 -m doctest -v sentinel_linear_search.py + +For manual testing run: +python sentinel_linear_search.py +""" + +def sentinel_linear_search(sequence, target): + """Pure implementation of sentinel linear search algorithm in Python + + :param sequence: some sequence with comparable items + :param target: item value to search + :return: index of found item or None if item is not found + + Examples: + >>> sentinel_linear_search([0, 5, 7, 10, 15], 0) + 0 + + >>> sentinel_linear_search([0, 5, 7, 10, 15], 15) + 4 + + >>> sentinel_linear_search([0, 5, 7, 10, 15], 5) + 1 + + >>> sentinel_linear_search([0, 5, 7, 10, 15], 6) + + """ + sequence.append(target) + + index = 0 + while sequence[index] != target: + index += 1 + + sequence.pop() + + if index == len(sequence): + return None + + return index + + +if __name__ == '__main__': + try: + raw_input # Python 2 + except NameError: + raw_input = input # Python 3 + + user_input = raw_input('Enter numbers separated by comma:\n').strip() + sequence = [int(item) for item in user_input.split(',')] + + target_input = raw_input('Enter a single number to be found in the list:\n') + target = int(target_input) + result = sentinel_linear_search(sequence, target) + if result is not None: + print('{} found at positions: {}'.format(target, result)) + else: + print('Not found') \ No newline at end of file