排序数组
题目描述:
给你一个整数数组 nums,请你将该数组升序排列。
示例 :
输入:nums = [5,2,3,1]
输出:[1,2,3,5]
提示:
- 1 <= nums.length <= 50000
- -50000 <= nums[i] <= 50000
解法
快排。
代码
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
self.qsort(nums, 0, len(nums) - 1)
return nums
def qsort(self, nums, left, right):
if left >= right:
return
start, end = left, right
pivot = random.randint(left, right) # 随机取一个区间中的数,并移到起始位置
nums[left], nums[pivot] = nums[pivot], nums[left]
flag = nums[left]
while left < right:
while left < right and nums[right] >= flag: # 这里要先从右向左,因为先从左向右的话,left 至少会移动一次。
right -= 1
while left < right and nums[left] <= flag:
left += 1
if left < right:
nums[left], nums[right] = nums[right], nums[left]
nums[start], nums[left] = nums[left], nums[start]
self.qsort(nums, start, left - 1)
self.qsort(nums, left + 1, end)
测试结果
执行用时:356 ms, 在所有 Python3 提交中击败了 76.45% 的用户
内存消耗:20 MB, 在所有 Python3 提交中击败了 66.71% 的用户
说明
算法题来源:力扣(LeetCode)