美文网首页
快速排序

快速排序

作者: 转身丶即天涯 | 来源:发表于2019-07-28 10:23 被阅读0次

    思路

    在给定的一个序列中选取第一个元素(也可以是其他的,一般情况都取第一个元素),作为基准元素。把小于基准元素的元素都放在基准元素的左边,把大于基准元素的元素都放在基准元素的右边。依此类推,直至无法分割。

    示例代码

    def my_sort(nums):
        """
        快速排序实现
        :param nums: 一个包含数值的list
        :return: 新的排序后的list
        """
        if len(nums) <= 1:
            return nums
    
        base_element = nums[0]
        left = [x for x in nums[1:] if x <= base_element]
        right = [x for x in nums[1:] if x > base_element]
    
        return my_sort(left) + [base_element] + my_sort(right)
    
    
    if __name__ == "__main__":
        nums = [1, 4, 5, 9, 7, 8, 2, 3]
        result = my_sort(nums)
        print(result)
    

    个人觉得这是一种很pythonic的实现方式,充分使用了递归和列表生成式。
    先选取第一个元素作为基准元素(base_element),然后使用列表生成式将小于基准元素的元素都放入left列表,然后把大于基准元素的元素都放入right列表。
    注意,遍历nums列表时要从第二个元素开始,因为如果从第一个元素开始将会陷入无限循环,最终导致引发RecursionError,因为我们已经将第一个元素作为基准元素了,需要跨过它,否则无法满足退出条件:left <= 1

    相关文章

      网友评论

          本文标题:快速排序

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