mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-28 07:21:07 +00:00
34889fc6d8
Use the last element as the first pivot, for it's easy to pop, this saves one element space. Iterating with the original list saves half the space, instead of generate a new shallow copy list by slice method.
58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
"""
|
|
This is 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
|
|
"""
|
|
from __future__ import print_function
|
|
|
|
|
|
def quick_sort(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:
|
|
>>> quick_sort([0, 5, 3, 2, 2])
|
|
[0, 2, 2, 3, 5]
|
|
|
|
>>> quick_sort([])
|
|
[]
|
|
|
|
>>> quick_sort([-2, -5, -45])
|
|
[-45, -5, -2]
|
|
"""
|
|
length = len(collection)
|
|
if length <= 1:
|
|
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)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
raw_input # Python 2
|
|
except NameError:
|
|
raw_input = input # Python 3
|
|
|
|
user_input = raw_input('Enter numbers separated by a comma:\n').strip()
|
|
unsorted = [ int(item) for item in user_input.split(',') ]
|
|
print( quick_sort(unsorted) )
|