前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >视频动画 | 什么是插入排序?

视频动画 | 什么是插入排序?

作者头像
我脱下短袖
修改2019-12-27 12:07:02
4730
修改2019-12-27 12:07:02
举报
文章被收录于专栏:算法无遗策算法无遗策

接下来就到插入排序了。我前面写了关于交换排序的算法,链接地址:

冒泡排序

快速排序

鸡尾酒排序

插入排序

插入排序是比较简单也比较直接的一种排序算法。它是从一堆数据中取出一个数据并将它插入到已排序的数据中合适的位置。

比如按身高排队,有一个人指挥排队从第二个人开始,按身高把当前的人安插到之前排序好队的合适的位置。

或者打扑克牌,假设我们拿到了10,J,K,A这四张牌,然后拿到了Q这张牌,那如何让手中的五张牌变为升序呢?如果我们只学了冒泡排序和快速排序,初始状态是10,J,K,A,Q。

如果是用冒泡排序或者快速排序去做的话,那就可能不合适。结果是对,但是浪费了很多比较次数。

正常人最简单的方式就是,把Q安插到J和K之间就可以了。

插入排序正是如此,它的思想就是维护一个有序区,把元素一个一个插入到有序区中的合适的位置,直到所有元素有序为止。

视频动画

http://mpvideo.qpic.cn/0af27pahzu5fqbiebqaaiaalbidvxuxiykuccijubmcqoaqlayfq.f10002.mp4?dis_k=29310117257a0d0773106fe1a3c70d00&dis_t=1577419547

Code

Result

初始状态 [5, 1, 3, 7, 4, 6, 2]

发生交换 [1, 5, 3, 7, 4, 6, 2]

1趟 [1, 5, 3, 7, 4, 6, 2]

发生交换 [1, 3, 5, 7, 4, 6, 2]

2趟 [1, 3, 5, 7, 4, 6, 2]

3趟 [1, 3, 5, 7, 4, 6, 2]

发生交换 [1, 3, 5, 4, 7, 6, 2]

发生交换 [1, 3, 4, 5, 7, 6, 2]

4趟 [1, 3, 4, 5, 7, 6, 2]

发生交换 [1, 3, 4, 5, 6, 7, 2]

5趟 [1, 3, 4, 5, 6, 7, 2]

发生交换 [1, 3, 4, 5, 6, 2, 7]

发生交换 [1, 3, 4, 5, 2, 6, 7]

发生交换 [1, 3, 4, 2, 5, 6, 7]

发生交换 [1, 3, 2, 4, 5, 6, 7]

发生交换 [1, 2, 3, 4, 5, 6, 7]

6趟 [1, 2, 3, 4, 5, 6, 7]

优化 减少不必要的交换

回顾一下上面代码运行的结果,发现有很多次的交换,会有一点一点的时间上的消耗。如果我们做减少交换次数的代码,那如何去写呢?

回顾一下快速排序那篇文章,也使用了减少交换次数的方法。它是一个一个待比较完之后,定位最大的元素或者最小的元素,然后进行交换。

插入排序把待插入的元素做一个标记,和有序区一个一个元素去做比较。假设是从待插入元素的邻近元素开始比较(从后往前),符合条件的前一个元素去复制粘贴到待插入元素的地址。直到不符合条件才插入到合适的位置。

视频动画

http://mpvideo.qpic.cn/0af2mk76yi3v2dacaqeasdicbmcfxwhly2wsgvzfaacaocalaadq.f10002.mp4?dis_k=ef105dc3265b61e6fa35df2d89b9b9de&dis_t=1577419547

Code

Result

初始状态 [5, 1, 3, 7, 4, 6, 2]

发生复制 [5, 5, 3, 7, 4, 6, 2]

1趟 [1, 5, 3, 7, 4, 6, 2]

发生复制 [1, 5, 5, 7, 4, 6, 2]

2趟 [1, 3, 5, 7, 4, 6, 2]

3趟 [1, 3, 5, 7, 4, 6, 2]

发生复制 [1, 3, 5, 7, 7, 6, 2]

发生复制 [1, 3, 5, 5, 7, 6, 2]

4趟 [1, 3, 4, 5, 7, 6, 2]

发生复制 [1, 3, 4, 5, 7, 7, 2]

5趟 [1, 3, 4, 5, 6, 7, 2]

发生复制 [1, 3, 4, 5, 6, 7, 7]

发生复制 [1, 3, 4, 5, 6, 6, 7]

发生复制 [1, 3, 4, 5, 5, 6, 7]

发生复制 [1, 3, 4, 4, 5, 6, 7]

发生复制 [1, 3, 3, 4, 5, 6, 7]

6趟 [1, 2, 3, 4, 5, 6, 7]

——END——

推荐阅读:

视频动画 | 冒泡排序只是简单的冒泡排序吗?

视频动画 | 什么是快速排序?

视频动画 | 什么是鸡尾酒排序?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法无遗策 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档