十大经典排序算法动画,看我就够了! - V2EX
如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
solana
CoderOnePolo

十大经典排序算法动画,看我就够了!

  •  9
     
  •   CoderOnePolo Dec 3, 2018 9876 views
    This topic created in 2732 days ago, the information mentioned may be changed or developed.

    在前面的章节中详细的讲解分析了十大经典排序算法,本文将进行一个大总结同时分析它们的时间复杂度与稳定性。

    排序算法是《数据结构与算法》中最基本的算法之一。

    排序算法可以分为内部排序外部排序

    内部排序是数据记录在内存中进行排序。

    而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。

    常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。

    用一张图概括:

    image

    关于时间复杂度:

    1. 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。
    2. 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;
    3. O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序
    4. 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。

    关于稳定性:

    1. 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。

    2. 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。

    1. 冒泡排序

    image

    2. 选择排序

    image

    3. 插入排序

    image

    4. 希尔排序

    image

    5. 归并排序

    image

    6. 快速排序

    image

    7. 堆排序

    image

    8. 计数排序

    image

    9. 桶排序

    image

    10. 基数排序

    image

    Tip 为了演示更加清楚,本文中所有的动画都放慢了速度,因此 GIF 大小对比之前会有所增大,图片加载速度会变慢,如果你想获取所有的超清动画,在公众号 五分钟学算法 回复 v2ex 可获得资料。

    Supplement 1    Dec 3, 2018

    修正堆排序:

    Supplement 2    Dec 3, 2018
    没想到能有这么多收藏,感谢各位大佬支持,感兴趣的话可以关注一波公众号^_^
    40 replies    2018-12-03 20:26:43 +08:00
    singlepig
        1
    singlepig  
       Dec 3, 2018   1
    楼主,7 堆排序和 6 的图是一样的
    CoderOnePolo
        2
    CoderOnePolo  
    OP
       Dec 3, 2018
    @singlepig 不好意思,上传错了
    RyougiShiki
        3
    RyougiShiki  
       Dec 3, 2018   1
    不错。编程领域需要设计,图明白多了。
    CoderOnePolo
        4
    CoderOnePolo  
    OP
       Dec 3, 2018
    @RyougiShiki 感谢肯定。也是因为之前学这个的时候太抽象了,感觉还是具体化就好理解了。
    zxgfy12
        5
    zxgfy12  
       Dec 3, 2018   1
    这个很不错,特别是给入门的看。
    话说这种动图,是用什么工具来做呢?
    richzhu
        6
    richzhu  
       Dec 3, 2018
    我前几天下载这个 APP 啦,哈哈哈~
    mogami95
        7
    mogami95  
       Dec 3, 2018   1
    漂亮!
    thfurior
        8
    thfurior  
       Dec 3, 2018   1
    不错,很清楚
    jingyulong
        9
    jingyulong  
       Dec 3, 2018
    从初学者的角度来写,不错的
    CoderOnePolo
        10
    CoderOnePolo  
    OP
       Dec 3, 2018
    @zxgfy12 都是自己用 PPT 做的,做的目的就是给初学者入门用的,希望能更好的理解。
    CoderOnePolo
        11
    CoderOnePolo  
    OP
       Dec 3, 2018
    @richzhu 是哪个 APP,我下载下来学习参考一下^_^
    CoderOnePolo
        12
    CoderOnePolo  
    OP
       Dec 3, 2018
    @jingyulong
    @thfurior
    @mogami95
    感谢肯定,欢迎一起学习!
    richzhu
        13
    richzhu  
       Dec 3, 2018   1
    @CoderOnePolo 苹果商店搜 “算法动画图解”
    CoderOnePolo
        14
    CoderOnePolo  
    OP
       Dec 3, 2018
    @richzhu 收到,感谢!!!
    vanishcode
        15
    vanishcode  
       Dec 3, 2018 via Android   1
    楼主这个也挺好的。我之前学数据结构的时候用的 visualgo https://visualgo.net/zh
    trait
        16
    trait  
       Dec 3, 2018   1
    楼主画个 timsort 吧,算是比较快的,好多语言的内置算法
    ilunny
        17
    ilunny  
       Dec 3, 2018 via Android
    为什么冒泡排序最好情况是 O(n)
    IdJoel
        18
    IdJoel  
       Dec 3, 2018   1
    非常棒 感谢
    CoderOnePolo
        19
    CoderOnePolo  
    OP
       Dec 3, 2018
    @vanishcode
    @IdJoel 感谢肯定,欢迎收藏关注。


    @trait 我研究一下


    @ilunny O(n)已经是很快的
    hxz688
        20
    hxz6688  
       Dec 3, 2018   1
    感觉不错的
    daweii
        21
    daweii  
       Dec 3, 2018 via iPhone   1
    我的流量。。。
    CoderOnePolo
        22
    CoderOnePolo  
    OP
       Dec 3, 2018
    @hxz6688 谢谢肯定

    @daweii 流量是有点大,尴尬
    reself
        23
    reself  
       Dec 3, 2018 via Android   1
    @ilunny 至少要遍历一次数组才能知道是否有序
    KingHL
        24
    KingHL  
       Dec 3, 2018
    赞一个
    Wanex
        25
    Wanex  
       Dec 3, 2018
    先马克
    jevirs
        26
    jevirs  
       Dec 3, 2018
    内容不错哦,附上代码印象更加深刻
    CoderOnePolo
        27
    CoderOnePolo  
    OP
       Dec 3, 2018 via iPhone
    @jevirs 在公众号系列里每一个排序动画都配上了几种语言的代码实现,可以关注看看
    loading
        28
    loading  
       Dec 3, 2018 via Android   1
    谷歌市场的算法动画的 app 是楼主的?

    我设置三大金刚键后,底下按钮被挡。
    CoderOnePolo
        29
    CoderOnePolo  
    OP
       Dec 3, 2018 via iPhone
    @loading 不是,我还没做过类似的 APP
    anonymous256
        30
    anonymous256  
       Dec 3, 2018 via Android
    有小地方想要较真一下。
    我们说一个算法的时间复杂度是一个关于问题规模的函数,大 O 的表示法已经是它最坏的情况(忽略系数)。如果要准确的计算一个算法再最好 /平均 /最坏的表现,应该用函数表示,不应该直接用 O 符号。参考算法导论的 T(n)表示法。
    anonymous256
        31
    anonymous256  
       Dec 3, 2018 via Android   1
    感觉每个图做成一个专题,旁边附上伪码(pseudocode),下面写上该算法的各种语言实现方式。一定很受学习者欢迎~
    CoderOnePolo
        32
    CoderOnePolo  
    OP
       Dec 3, 2018
    @anonymous256 目前每个图已经做成一个专题,这十个经典排序算法都用几种语言实现了,并且还配了伪码动画思路。文章在公众号里面可以看到^_^
    zwh2698
        33
    zwh2698  
       Dec 3, 2018 via Android   1
    hei1000
        34
    hei1000  
       Dec 3, 2018
    不写成文章吗,这个不好放到 pocket 里面去啊
    stebest
        35
    stebest  
       Dec 3, 2018   1
    归并排序实际上有两种方式,时间复杂度一致。但比如在对于处理链表排序时候,两种方式的空间复杂度分别为 O(nlogn)和 O(1)
    azhangbing
        36
    azhangbing  
       Dec 3, 2018 via iPhone   1
    不错不错
    july1995
        37
    july1995  
       Dec 3, 2018   1
    优秀,考研党正在复习数据结构的查找与排序。
    rayjoy
        38
    rayjoy  
       Dec 3, 2018
    做的很用心了,收藏一下。
    CoderOnePolo
        39
    CoderOnePolo  
    OP
       Dec 3, 2018 via iPhone
    @hei1000 文章都在微信公众号里面,以前发了几篇文章在这里,但感觉有点不好,就没全发。
    CoderOnePolo
        40
    CoderOnePolo  
    OP
       Dec 3, 2018
    @rayjoy
    @azhangbing 感谢肯定
    @july1995 希望对你有帮助,公众号里还有其他类似的数据结构分析,有时间也可以看看~
    About     Help     Advertise &bsp;   Blog     API     FAQ     Solana     5361 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 213ms UTC 07:07 PVG 15:07 LAX 00:07 JFK 03:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86