快排Python模板(可过leetcode912. 排序数组)

该文章介绍了一个Python类实现的快速排序算法,适用于面试场景。算法中使用了随机选择哨兵的方法来优化,避免最坏情况下的性能问题。通过设置左右指针并交换元素,对数组进行划分并递归地排序左右子数组。
摘要由CSDN通过智能技术生成

参考: python面试最简洁的快速排序数组代码附口诀记忆

class Solution(object):


    def sortArray(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        self.quicksort(nums,0,len(nums)-1)
        return nums
    
    def quicksort(self,nums,left,right):
        if left>=right:                         #若数组为空或只有一个元素,直接返回
            return
        flag=nums[random.randint(left,right)]   #随机初始化哨兵位置
        i,j=left,right                          #设定从左到右的指针i,从右到左的指针j
        while i<=j:
            while nums[i]<flag: i+=1            #i从左往右扫,找到大于等于flag的数。
            while nums[j]>flag: j-=1            #j从右往左扫,找到小于等于flag的数。
            if i<=j:
                nums[i],nums[j]=nums[j],nums[i] #交换左右指针下标对应的数值
                i+=1                            #左指针继续往右走
                j-=1                            #右指针继续往左走
        self.quicksort(nums,left,j)             #递归解决flag左边的低位数组的排序
        self.quicksort(nums,i,right)            #递归解决flag右边的高位数组的排序
              

在这里插入图片描述

注意:将中间位置作为哨兵时,会超时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值