class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
if len(nums) <= 1:
return nums
left = []
right = []
for num in nums[1:]:
if num <= nums[0]:
left.append(num)
else:
right.append(num)
left = self.sortArray(left)
right = self.sortArray(right)
return left + [nums[0]] + right
前一部分使用left和right做partition,后一部分做递归,然后返回整合结果。
上面的方法虽然比较好理解,但是申请了额外的空间处理partition,下面是不使用额外空间处理partition的快排
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
def quick_sort(start, end):
if start >= end:
return
left = start
right = end
pivot = nums[start]
while left <= right:
while left <= right and nums[left] < pivot:
left += 1
while left <= right and nums[right] > pivot:
right -= 1
if left <= right:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right -= 1
quick_sort(start, right)
quick_sort(left, end)
quick_sort(0, len(nums)-1)
return nums