Python一行代码实现快速排序

不解释直接上代码

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一行代码实现快速排序)