课时48 快速排序的实现2
def quick_sort(alist,first,last):
if first>=last: #列表只有一个元素的情况
#且考虑在后面递归时low-1的情况
return
"""快速排序"""
mid_value=alist[first]
low=first
high=last
while low<high:
#让high的指标左移
while low<high and alist[high]>=mid_value:
high-=1
alist[low]=alist[high]
while low<high and alist[low]<mid_value:
low+=1
alist[high]=alist[low]
#从循环退出时,low==high
alist[low]=mid_value
#此时,以中间值为中心,一个序列被分成了两部分。
#对左边的部分进行quick——sort,对右边也如此。通过递归,来进行排序
quick_sort(alist,first,low-1)
quick_sort(alist,low+1,last)
if __name__=="__main__":
li=[54,26,17,77,31,44,55,20]
print(li)
quick_sort(li,0,len(li)-1)
print(li)
执行结果:
[54, 26, 17, 77, 31, 44, 55, 20]
[17, 20, 26, 31, 44, 54, 55, 77]