美文网首页
Python一行代码实现快速排序

Python一行代码实现快速排序

作者: 酌泠 | 来源:发表于2018-03-20 16:57 被阅读0次

    不解释直接上代码

    def qs(a): return qs([i for i in a[1:] if i <= a[0]]) + a[0:1] + qs([i for i in a[1:] if i > a[0]]) if len(a) > 1 else a
    

    更一般的写法是这样:

    def quick_sort(a):
        if len(a) > 1:
            return quick_sort([i for i in a[1:] if i <= a[0]]) + \
                   [a[0]] + quick_sort([i for i in a[1:] if i > a[0]])
        else:
            return a
    

    反思

    最初受到启发用列表生成器实现时,关键的一行我是这样写的

    return quick_sort([i for i in a if i <= a[0]]) + \
    quick_sort([i for i in a if i > a[0]])
    

    当然这是错的,当出现重复数字时(例如[5,2,5]),左边的递归会陷入死循环。于是我修改为

    return quick_sort([i for i in a if i < a[0]]) + \
    + a[0] + quick_sort([i for i in a if i > a[0]])
    

    然而还是错误,因为a[0]不是列表,不能直接与列表相加。而且重复的数据会丢失。最终修改后才是上面的模样。
    暴露的主要问题一是思维不够缜密,二是对基础的掌握欠缺。

    相关文章

      网友评论

          本文标题:Python一行代码实现快速排序

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