Quick Sort

快排的模板代码。

两个要点:

  • pivot 要选择的是值,而不是索引

  • 三个 while 循环的条件都是 <= 而不是 <

Partition 执行完毕之后,最后 left 和 right 已经交错而过,此时 right 在左 left 在右

class Solution:
    # @param {int[]} A an integer array
    # @return nothing
    def sortIntegers2(self, A):
        # Write your code here
        self.quickSort(A, 0, len(A) - 1)
    
    def quickSort(self, A, start, end):
        if start >= end:
            return
        
        left, right = start, end
        # key point 1: pivot is the value, not the index
        pivot = A[start + (end - start) // 2];

        # key point 2: every time you compare left & right, it should be 
        # left <= right not left < right
        while left <= right:
            while left <= right and A[left] < pivot:
                left += 1
            
            while left <= right and A[right] > pivot:
                right -= 1
            
            if left <= right:
                A[left], A[right] = A[right], A[left]
                left += 1
                right -= 1
        
        self.quickSort(A, start, right)
        self.quickSort(A, left, end)

最后更新于

这有帮助吗?