實現思路:
- 兩個指針left,right分別指向列表的第二個元素和最後一個元素,然後取一個參考值,默認爲第一個列表的第一個元素list[0],稱爲pivotvalue
- 然後left指向的值先和參考值pivotvalue進行比較,若list[left]小於或等於pivotvalue值,left就一直向右移動,left+1,直到移動到大於pivotvalue值的地方,停住
- right指向的值和參考值pivotvalue進行比較,若list[right]大於pivotvalue值,right就一直向左移動,right-1,直到移動到小於pivotvalue值的地方,停住
- 此時,left和right若還沒有相遇,即left還小於right,則二者指向的值互換
- 若right<=left,則已經相遇,說明第一次排序已經完成,將list[right]與list[0]的值進行互換,進行之後的遞歸
def QuickSort(list): #快速排序主函數
QuickSortHelper(list,0,len(list)-1)
def QuickSortHelper(list,first,last):
if first < last:
index = Partitions(list,first,last)
QuickSortHelper(list,first,index-1)
QuickSortHelper(list,index+1,last)
def Partitions(list,first,last): #找到分割點位置
left = first+1
right = last
pivotvalue = list[first] #默認將第一個值作爲樞紐值
while left < right :
while list[left] <= pivotvalue:
left += 1
while list[right] > pivotvalue:
right = right - 1
if left < right:
list[left],list[right] = list[right],list[left]
list[first],list[right]=list[right],list[first]
return right #返回split point
list_demo = [6,1,2,7,9,3,4,5,10,8]
print(list_demo)
QuickSort(list_demo)
print(list_demo)