美文网首页
动画 | 什么是插入排序?

动画 | 什么是插入排序?

作者: 我脱下短袖 | 来源:发表于2020-01-27 13:32 被阅读0次

插入排序

file

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

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

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

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

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

file

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

视频动画

算法动画视频 地址

Code
file
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]

插入排序优化,减少不必要的交换次数

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

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

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

视频动画

算法动画视频 地址

Code
file
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]

长按下图二维码关注公众号,「算法无遗策」持续更新算法

file

相关文章

  • 动画 | 什么是插入排序?

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

  • canvas+js实现直接插入排序可视化

    先展示一下动画效果: 首先先简单了解一下什么是直接插入排序: 直接插入排序会在遍历的过程中将一个序列分为两部分,前...

  • LeetCode-147-对链表进行插入排序

    对链表进行插入排序 题目描述:对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部...

  • 147. 对链表进行插入排序

    对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭...

  • 147. 对链表进行插入排序

    对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭...

  • 147. 对链表进行插入排序

    对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭...

  • 希尔排序

    希尔排序又称缩小增量排序,它本质上是一个插入排序算法,为什么那? 因为,对于插入排序而言,插入排序是将当前的待排序...

  • python实现插入排序&希尔排序

    为什么要将插入排序和希尔排序放在一起来写呢?因为插入排序和希尔排序的思路是相同的,希尔排序可以看成是插入排序的特殊...

  • 什么是插入排序算法?

    ​ 介绍 大家好,我是Sanjula,在这个教程中,我希望告诉你一些关于插入排序算法的知识,包括: 什么是插入排序...

  • Android高手秘笈之View的动画

    目录[1.什么是逐帧动画?][2.什么是补间动画?都有哪些补间动画?][3.什么是属性动画?为什么要引入属性动画?...

网友评论

      本文标题:动画 | 什么是插入排序?

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