Partition算法。快排實習的關鍵。 這裏只需要把比k大的放右邊,小的放左邊,並沒有繼續再在左右partition裏排序。相當於完成了快排的一個步驟。
思想:雙指針,左邊和K對比,if nums[start]<k, 說明就不是一個swap candidate(因爲比K小的本來就應該好好在左邊呆着), 於是start+1繼續往下找。同理,右邊和K對比,if nums[end]>=k, 說明不是一個swap candidate,end-1. 而後找到candidate以後,swap. 左指針+1,右指針-1。
def partition(nums,k):
start,end=0,len(nums)-1
while start<=end:
while start<=end and nums[start]<k:
start += 1
while start<=end and nums[end]>=k:
end -= 1
if start<=end:
nums[start],nums[end]=nums[end],nums[start]
start += 1
end -=1
return start