Lintcode 31. Partition Algorithm

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 


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