快速排序:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
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]
leftmark=first+1
rightmark=last
while True:
while L[leftmark]<=pivot:
#如果列表中存在与划分元素pivot相等的元素,让它位于left部分
#以下检测用于划分元素pivot是列表中的最大元素时,防止leftmark越界
if leftmark==rightmark:
break
leftmark+=1
while L[rightmark]>pivot:
#这里不需要检测,划分元素pivot是列表中的最小元素时,rightMark自动停在first处
rightmark-=1
if leftmark<rightmark:
#leftMark处的元素大于pivot,rightMark处的元素小于pivot,交换两者
L[leftmark],L[rightmark]=L[rightmark],L[leftmark]
else:
break
#交换first处的划分元素与rightMark元素
L[first],L[rightmark]=L[rightmark],L[first]
#返回划分元素pivot的最终位置
return rightmark
num_list=[1,8,6,7,45,9]
quicksort(num_list)
print(str(num_list))