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