[python]快速排序

Posted ViviranZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[python]快速排序相关的知识,希望对你有一定的参考价值。

思路就是嵌套找位置

找位置里面两个指针左右开始往中间走

代码有点绕很大程度是因为直接在原字符array上处理,(节省空间)

 代码:

class Solution:
    def Gpos(self,L,a,b):
        i=a
        j=b
        pivot=L[a]
        if i>j:
            return -1
        while True:
            #print("i=",i,"j=",j)
            while j>i and L[j]<=pivot:#从后往前 找到最靠后比pivot大的
                j=j-1
                #print("i1=",i,"j1=",j)
            if j==i:#如果j==i:i处有个坑,i+1到j都比pivot大:
                L[i]=pivot
                #print("List=",list)
                return i
            if L[j]>pivot:#都是T
                L[i]=L[j]
                i=i+1#list[j]有一个新的坑
                #print("list1=",list)
            while j>i and L[i]>=pivot:
                i=i+1
                #print("i2=",i,"j2=",j)
            if j==i:
                L[i]=pivot
                #print("List=",list)
                return i
            if L[i]<pivot:
                L[j]=L[i]
                j=j-1
                #print("list2=",list)   
    def SORT(self,L,a,b):#左右都包含 0-N-1
        i=self.Gpos(L,a,b)#return list[a]在list[a]-list[b]段的位置
        #print("I=",i)
        if a<i-1:
            self.SORT(L,a,i-1)
        if i+1<b:
            self.SORT(L,i+1,b)
    def QSort(self, nums: List[int]) -> int:
        self.SORT(nums,0,len(nums)-1)#从大到小
        return nums 
        

以上是关于[python]快速排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法杂谈 —— 量化数组的有序程度

(学习笔记)排序算法

(学习笔记)排序算法

排序算法系列——快速排序

决战西二旗|快速排序的优化

快速排序