"""Basic Quicksort
"""
from random import randint
def qs_basic(nums, low=0, high=None):
if high is None:
high = len(nums) - 1
# Sorting
if low < high:
pivot = nums[randint(low, high)]
# i finds greater than pivot, j finds smaller than pivot
i, j = low, high
# Sort the pivot
while i <= j:
while nums[i] < pivot:
i += 1
while nums[j] > pivot:
j -= 1
# Pivot still not sorted
if i <= j:
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
# Recursive Partition
qs_basic(nums, low, j)
qs_basic(nums, i, high)
return nums # for easy testing