链接
https://leetcode-cn.com/problems/sort-an-array/submissions/
前言
题目
给你一个整数数组 nums
,请你将该数组升序排列。
示例1:
输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例2:
输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000
关键
思路1
- 快速排序
- 基准点pivot取左端点
- 易超时
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
def quickSort(nums, low, high):
if low>=high: return
pivot = nums[low]
l, r=low, high
while l<r:
while l<r and nums[r]>=pivot:
r-=1
nums[l]=nums[r]
while l<r and nums[l]<pivot:
l+=1
nums[r]=nums[l]
nums[l]=pivot
quickSort(nums, low, l-1)
quickSort(nums, l+1, high)
quickSort(nums, 0, len(nums)-1)
return nums
思路2
- 快速排序
- 基准点pivot随机选取
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
def quickSort(nums, low, high):
if low>=high: return
pivot_ind=random.randint(low, high)
pivot=nums[pivot_ind]
# 交换pivot和左端点元素
nums[low], nums[pivot_ind]=nums[pivot_ind], nums[low]
# 进行左右移动
l, r=low, high
while l<r:
while l<r and nums[r]>=pivot:
r-=1
nums[l]=nums[r]
while l<r and nums[l]<pivot:
l+=1
nums[r]=nums[l]
nums[l]=pivot
quickSort(nums, low, l-1)
quickSort(nums, l+1, high)
quickSort(nums, 0, len(nums)-1)
return nums