题目描述:
给你一个整数数组 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]
来源:力扣(LeetCode)
算法实现:
方法一:
暴力解法,冒泡排序 时间复杂度O(n^2)
def sortArray(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
length=len(nums)
for i in range(length-1):
flag=False
for j in range(0,length-1-i):
if nums[j]>nums[j+1]:
flag=True
nums[j+1],nums[j]=nums[j],nums[j+1]
if flag==False:
return nums
return nums
方法二:快速排序
(快速排序的关键在于,使用random从中挑选一个数作为分界点)
1、每次挑选出一个随机数num,小于或等于num的数放在num的左边,大于或等于num的数放在num的右边
2、然后将左右两部分分别进行递归,再重复步骤1
import random
class Solution(object):
def sortArray(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
left=0
right=len(nums)-1
self.sort(nums,left,right)
return nums
# 快速排序
def sort(self,nums,left,right):
if left>=right:
return
mid=self.quickSort(nums,left,right)
self.sort(nums,left,mid-1)
self.sort(nums,mid+1,right)
def quickSort(self,nums,left,right):
ran=random.randint(left,right)
nums[left],nums[ran]=nums[ran],nums[left]
num=nums[left]
while left<right:
while left<right and nums[right]>=num:
right=right-1
nums[left]=nums[right]
while left<right and nums[left]<=num:
left=left+1
nums[right]=nums[left]
nums[left]=num
return left