好久没写python,对齐不太习惯
def quicksort(L):
qsort(L,0,len(L)-1)
def qsort(L,first,last):
if first<last:
split=partition(L,first,last)
qsort(L,first,split-1)
qsort(L,split+1,last)
def partition(L,first,last):
pivot=L[first]#人工选定pivot值
leftmark=first+1
rightmark=last
while True:
while L[leftmark] <= pivot:#先找到第一个比pivot大的数的位置
if leftmark==rightmark:
break
leftmark+=1
while L[rightmark]>pivot:#再找到第一个不大于pivot的数的位置
rightmark-=1
if leftmark<rightmark:#如果这时候左指针在右指针的左侧,那么交换二者的数值后,可以使得左指针及左侧的数均不大于pivot,而右指针右侧的数均大于pivot
L[leftmark],L[rightmark]=L[rightmark],L[leftmark]
else:#只要左指针还在右指针左侧,就一直调整直到左右指针位置相等,此时左侧全部不大于pivot,右侧全部大于pivot
break
L[first],L[rightmark]=L[rightmark],L[first]#返回此时的左右指针位置
return rightmark
num=[5,-4,6,3,7,11,1,2]
quicksort(num)
print(str(num))