因为LeetCode上的算法题不少涉及到一些基础的数据结构,为了更好的理解后续更新的一些复杂题目的动画,推出一个新系列 -----《图解数据结构》,主要使用动画来描述常见的数据结构和算法。本系列包括十大排序、堆、队列、树、并查集、图等等大概几十篇。git
你能够关注公众号 五分钟学算法 获取更多排序内容。github
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,由于只要打过扑克牌的人都应该可以秒懂。插入排序是一种最简单直观的排序算法,它的工做原理是经过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法
将第一待排序序列第一个元素看作一个有序序列,把第二个元素到最后一个元素当成是未排序序列。编程
从头至尾依次扫描未排序序列,将扫描到的每一个元素插入有序序列的适当位置。(若是待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)。数据结构
来源:github.com/hustcc/JS-S…数据结构和算法
一开始左端数字已经排序,数字 5 不动编程语言
而后,取出剩余未操做的左端数字 3动画
将其与已经操做的左侧数字相比较3d
若是左边的数字较大,则交换两个数字调试
这种状况下,因为 5 大于 3 ,因此交换两个数字
重复此操做,直到出现一个较小的数字或者数字到达左端
数字 3 已经完成排序
接下来,和以前同样取出剩余未操做的左端数字 4
与其相邻的左边数字进行比较
这种状况下,因为 5 大于 4 ,因此交换两个数字
继续操做,因为 3 小于 4 ,即出现了更小的数字,因此 4 中止移动
数字 4 已经完成排序
重复相同的操做,直到全部的数字完成排序
为了更好的让读者用本身熟悉的编程语言来理解动画,笔者将贴出多种编程语言的参考代码,代码所有来源于网上。
若是你是iOS开发者,能够在GitHub上 github.com/MisterBooo/… 获取更直观可调试运行的源码。
你能够关注公众号 五分钟学算法 获取更多排序内容。