import random
import sys
sys.setrecursionlimit(1000000)
class Solution(object):
def sortArray(self, nums):
self.quickSort(nums, 0, len(nums) - 1)
return nums
def quickSort(self, nums, low, high):
if low >= high:
return
pivotIndex = random.randint(low, high)
self.swap(nums, pivotIndex, high)
pivot = nums[high]
lt = low
i = low
gt = high
while i <= gt:
if nums[i] < pivot:
self.swap(nums, lt, i)
lt += 1
i += 1
elif nums[i] > pivot:
self.swap(nums, i, gt)
gt -= 1
else:
i += 1
self.quickSort(nums, low, lt - 1)
self.quickSort(nums, gt + 1, high)
def swap(self, nums, i, j):
nums[i], nums[j] = nums[j], nums[i]
aW1wb3J0IHJhbmRvbQppbXBvcnQgc3lzCnN5cy5zZXRyZWN1cnNpb25saW1pdCgxMDAwMDAwKQpjbGFzcyBTb2x1dGlvbihvYmplY3QpOgogICAgZGVmIHNvcnRBcnJheShzZWxmLCBudW1zKToKICAgICAgICBzZWxmLnF1aWNrU29ydChudW1zLCAwLCBsZW4obnVtcykgLSAxKQogICAgICAgIHJldHVybiBudW1zCgogICAgZGVmIHF1aWNrU29ydChzZWxmLCBudW1zLCBsb3csIGhpZ2gpOgogICAgICAgIGlmIGxvdyA+PSBoaWdoOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgcGl2b3RJbmRleCA9IHJhbmRvbS5yYW5kaW50KGxvdywgaGlnaCkKICAgICAgICBzZWxmLnN3YXAobnVtcywgcGl2b3RJbmRleCwgaGlnaCkKICAgICAgICBwaXZvdCA9IG51bXNbaGlnaF0KCgogICAgICAgIGx0ID0gbG93ICAgICAgICAKICAgICAgICBpID0gbG93ICAgICAgICAgICAKICAgICAgICBndCA9IGhpZ2ggICAgICAgICAKICAgICAgICB3aGlsZSBpIDw9IGd0OgogICAgICAgICAgICBpZiBudW1zW2ldIDwgcGl2b3Q6CiAgICAgICAgICAgICAgICBzZWxmLnN3YXAobnVtcywgbHQsIGkpCiAgICAgICAgICAgICAgICBsdCArPSAxCiAgICAgICAgICAgICAgICBpICs9IDEKICAgICAgICAgICAgZWxpZiBudW1zW2ldID4gcGl2b3Q6CiAgICAgICAgICAgICAgICBzZWxmLnN3YXAobnVtcywgaSwgZ3QpCiAgICAgICAgICAgICAgICBndCAtPSAxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpICs9IDEKCiAgICAgICAgc2VsZi5xdWlja1NvcnQobnVtcywgbG93LCBsdCAtIDEpCiAgICAgICAgc2VsZi5xdWlja1NvcnQobnVtcywgZ3QgKyAxLCBoaWdoKQoKICAgIGRlZiBzd2FwKHNlbGYsIG51bXMsIGksIGopOgogICAgICAgIG51bXNbaV0sIG51bXNbal0gPSBudW1zW2pdLCBudW1zW2ldCg==