From 976e81f88d3b74a31db9f80757b0192306786c14 Mon Sep 17 00:00:00 2001 From: Naveen Arunachalam Date: Thu, 4 Aug 2016 11:07:45 -0700 Subject: [PATCH] Create bogosort.py Bogosort randomly sorts a list until it is sorted. Its computational complexity has a best case of O(n) and a worst case of O(n!). --- sorts/bogosort.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 sorts/bogosort.py diff --git a/sorts/bogosort.py b/sorts/bogosort.py new file mode 100644 index 000000000..2e297c852 --- /dev/null +++ b/sorts/bogosort.py @@ -0,0 +1,52 @@ +""" +This is pure python implementation of bogosort algorithm +For doctests run following command: +python -m doctest -v bogosort.py +or +python3 -m doctest -v bogosort.py +For manual testing run: +python bogosort.py +""" + +from __future__ import print_function +import random + +def bogosort(collection): + """Pure implementation of quick sort algorithm in Python + :param collection: some mutable ordered collection with heterogeneous + comparable items inside + :return: the same collection ordered by ascending + Examples: + >>> bogosort([0, 5, 3, 2, 2]) + [0, 2, 2, 3, 5] + >>> bogosort([]) + [] + >>> bogosort([-2, -5, -45]) + [-45, -5, -2] + """ + + def isSorted(collection): + if len(collection) < 2: + return True + for i in range(len(collection)-1): + if collection[i] > collection[i+1]: + return False + return True + + while not isSorted(collection): + random.shuffle(collection) + return collection + +if __name__ == '__main__': + import sys + + # For python 2.x and 3.x compatibility: 3.x has not raw_input builtin + # otherwise 2.x's input builtin function is too "smart" + if sys.version_info.major < 3: + input_function = raw_input + else: + input_function = input + + user_input = input_function('Enter numbers separated by coma:\n') + unsorted = [int(item) for item in user_input.split(',')] + print(bogosort(unsorted))