[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]快速排序的主要内容,如果未能解决你的问题,请参考以下文章