From 2e90debab31f8fef88fafee5a7e2b2d1ab738d30 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Thu, 15 Oct 2020 15:07:34 +0200 Subject: [PATCH] Tighten up quicksort() (#3319) * Tighten up quicksort() * updating DIRECTORY.md * str does not support .pop() Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> --- DIRECTORY.md | 1 + sorts/quick_sort.py | 40 ++++++++++++++-------------------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index d2ce99e71..2cf51f8c4 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -738,6 +738,7 @@ * [Iterative Merge Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/iterative_merge_sort.py) * [Merge Insertion Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/merge_insertion_sort.py) * [Merge Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/merge_sort.py) + * [Natural Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/natural_sort.py) * [Odd Even Transposition Parallel](https://github.com/TheAlgorithms/Python/blob/master/sorts/odd_even_transposition_parallel.py) * [Odd Even Transposition Single Threaded](https://github.com/TheAlgorithms/Python/blob/master/sorts/odd_even_transposition_single_threaded.py) * [Pancake Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/pancake_sort.py) diff --git a/sorts/quick_sort.py b/sorts/quick_sort.py index f2a55c58b..c6687a7fa 100644 --- a/sorts/quick_sort.py +++ b/sorts/quick_sort.py @@ -1,48 +1,36 @@ """ -This is a pure Python implementation of the quick sort algorithm +A pure Python implementation of the quick sort algorithm For doctests run following command: -python -m doctest -v quick_sort.py -or python3 -m doctest -v quick_sort.py For manual testing run: -python quick_sort.py +python3 quick_sort.py """ -def quick_sort(collection): - """Pure implementation of quick sort algorithm in Python +def quick_sort(collection: list) -> list: + """A pure Python implementation of quick sort algorithm - :param collection: some mutable ordered collection with heterogeneous - comparable items inside + :param collection: a mutable collection of comparable items :return: the same collection ordered by ascending Examples: >>> quick_sort([0, 5, 3, 2, 2]) [0, 2, 2, 3, 5] - >>> quick_sort([]) [] - - >>> quick_sort([-2, -5, -45]) - [-45, -5, -2] + >>> quick_sort([-2, 5, 0, -45]) + [-45, -2, 0, 5] """ - length = len(collection) - if length <= 1: + if len(collection) < 2: return collection - else: - # Use the last element as the first pivot - pivot = collection.pop() - # Put elements greater than pivot in greater list - # Put elements lesser than pivot in lesser list - greater, lesser = [], [] - for element in collection: - if element > pivot: - greater.append(element) - else: - lesser.append(element) - return quick_sort(lesser) + [pivot] + quick_sort(greater) + pivot = collection.pop() # Use the last element as the first pivot + greater = [] # All elements greater than pivot + lesser = [] # All elements less than or equal to pivot + for element in collection: + (greater if element > pivot else lesser).append(element) + return quick_sort(lesser) + [pivot] + quick_sort(greater) if __name__ == "__main__":