From 0e333ae02193fca1046fcd65ff5202eb054cc04e Mon Sep 17 00:00:00 2001 From: William Zhang <39932068+WilliamHYZhang@users.noreply.github.com> Date: Thu, 3 Oct 2019 05:17:30 -0400 Subject: [PATCH] added bogobogosort (#1258) * added bogobogosort * fix indentation error --- sorts/bogo_bogo_sort.py | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 sorts/bogo_bogo_sort.py diff --git a/sorts/bogo_bogo_sort.py b/sorts/bogo_bogo_sort.py new file mode 100644 index 000000000..f26a46e78 --- /dev/null +++ b/sorts/bogo_bogo_sort.py @@ -0,0 +1,54 @@ +""" +Python implementation of bogobogosort, a "sorting algorithm +designed not to succeed before the heat death of the universe +on any sizable list" - https://en.wikipedia.org/wiki/Bogosort. + +Author: WilliamHYZhang +""" + +import random + + +def bogo_bogo_sort(collection): + """ + returns the collection sorted in ascending order + :param collection: list of comparable items + :return: the list sorted in ascending order + + Examples: + >>> bogo_bogo_sort([0, 5, 3, 2, 2]) + [0, 2, 2, 3, 5] + >>> bogo_bogo_sort([-2, -5, -45]) + [-45, -5, -2] + >>> bogo_bogo_sort([420, 69]) + [69, 420] + """ + + def is_sorted(collection): + if len(collection) == 1: + return True + + clone = collection.copy() + while True: + random.shuffle(clone) + ordered = bogo_bogo_sort(clone[:-1]) + if clone[len(clone) - 1] >= max(ordered): + break + + for i in range(len(ordered)): + clone[i] = ordered[i] + + for i in range(len(collection)): + if clone[i] != collection[i]: + return False + return True + + while not is_sorted(collection): + random.shuffle(collection) + return collection + + +if __name__ == "__main__": + user_input = input("Enter numbers separated by a comma:\n").strip() + unsorted = [int(item) for item in user_input.split(",")] + print(bogo_bogo_sort(unsorted))