快速排序 python

實現思路:

  • 兩個指針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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章