美文网首页
快速排序 by Python

快速排序 by Python

作者: 慧鑫coming | 来源:发表于2019-01-31 06:08 被阅读0次

最好时间复杂度:O(n*logn)
最坏时间复杂度:O(n²)
平均时间复杂度:O(n*logn)
空间复杂度:O(1)
是否是稳定排序:No
是否是原地排序:Yes
python 实现:

class Solution:
    def quickSort(self, nums, left, right):
        """
        :type nums: List[int]
        :type left: int
        :type right: int
        :rtype: void
        """
        if left >= right:
            return
        povit = self.partition(nums, left, right)
        self.quickSort(nums, left, povit-1)
        self.quickSort(nums, povit+1, right)

    def partition(self, nums, left, right):
        """
        :type nums: List[int]
        :type left: int
        :type right: int
        :rtype: int
        """
        # 以末点作为分界点
        povit = nums[right]
        povit_index = left
        for i in range(left, right):
            # 将小于分界点的值从最左侧依次摆放,不考虑它们的顺序
            if nums[i] < povit:
                nums[povit_index], nums[i] = nums[i], nums[povit_index]
                povit_index += 1
        # 将分界点放到正确的位置
        nums[right], nums[povit_index] = nums[povit_index], nums[right]
        return povit_index

if __name__ == "__main__":
    nums = [1,3,2,4,6,8,4,5,6,7,11,13,10,21,12]
    s = Solution()
    # 注意使用时传入的是length-1,否则会发生越界
    s.quickSort(nums, 0, len(nums)-1)
    print(nums)

相关文章

网友评论

      本文标题:快速排序 by Python

      本文链接:https://www.haomeiwen.com/subject/mxohsqtx.html