算法设计与分析—排序算法

题目描述:

给你一个整数数组 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

猜你喜欢

转载自blog.csdn.net/qq_39740279/article/details/120460035