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]不是列表,不能直接与列表相加。而且重复的数据会丢失。最终修改后才是上面的模样。
暴露的主要问题一是思维不够缜密,二是对基础的掌握欠缺。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,217评论 17 410
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,262评论 25 709
  • It's an age of excessively paying attention to one's ap...
    不忘初欣happy阅读 1,709评论 0 0
  • 我来给大家仔细分析下,你就知道咋选择了。 生物的本能永远会选择有利于自己的一面。而文化,教育会阉割一个人的志气,从...
    网商暴利哥老杨阅读 1,495评论 0 0
  • 1.什么是javaScript【简称JS】。 JS是 (1).嵌入在HTML标签中 是脚本语言 (什么是脚本语言呢...
    yangliangliang阅读 1,852评论 0 1