'''
快速排序,将待排序序列通过一趟排序分为独立的两个序列,其中一个序列的值均比另一个序列的值小,对这两部分继续进行分组,以达到序列有序的目的
'''
def QuickSort(list,start,end):
left,right = start,end
if left >= right:
return
mid = list[start]
# 从表的两端交替向中间扫描
while left < right:
# right递减,如果第二层while循环没有判断left<right会导致列表索引超出范围
while left < right and list[right] >= mid:
right-=1
# list[left],list[right] = list[right],list[left]
list[left] = list[right]
while left <right and list[left] <= mid:
left+=1
# list[left],list[right] = list[right],list[left]
list[right] = list[left]
# left此时是枢轴所在位置,即mid应该的合适位置
list[left] = mid
QuickSort(list,start,left-1)
QuickSort(list,left+1,end)
# QuickSort和QuickSort_0 的区别??
# 举例:[50,10,90,30,70,40,80,60,20]
# 如果是list[left],list[right] = list[right],list[left],那么right=8时,list[8]=20<mid=50,所以[20,10,90,30,70,40,80,60,50];如果 list[left] = list[right],则为[20,10,90,30,70,40,80,60,20]
# 第二层while如果换成while list[right] >= mid和while list[left] <= mid,会导致IndexError: list index out of range