存在问题
1. 对于已经近乎升序的数组,每次采用最左作为基准,O(n2)
解决:随机选择基准
2. 对于大量数字重复的数组(5w个2),速度很慢
解决:去重重复
代码:
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
n = len(nums)
def quick(l, r):
if r <= l:
return nums
i, j = l, r
base = l
pivot_idx = random.randint(l, r)
nums[l], nums[pivot_idx] = nums[pivot_idx], nums[l]
while l < r:
while l < r and nums[r] >= nums[base]:
r -= 1
while l < r and nums[l] <= nums[base]:
l += 1
nums[l], nums[r] = nums[r], nums[l]
nums[base], nums[l] = nums[l], nums[base]
lp = l - 1
rp = l + 1
while lp > base and nums[lp] == nums[l]:
lp -= 1
while rp < j and nums[rp] == nums[l]:
rp += 1
print(i, lp, rp, j)
quick(i, lp)
quick(rp, j)
return nums
n = len(nums)
return quick(0, n - 1)