常用排序算法之插入排序

Posted RobotCode俱乐部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用排序算法之插入排序相关的知识,希望对你有一定的参考价值。

插入排序和上篇讲的冒泡、选择排序一样都是平均时间复杂度为O(n^2)的排序算法(常用排序算法之冒泡排序、选择排序),这也限制了他们的一些使用,在大数据集排序时很少用到,这三种算法当然也是最简单易懂的算法,普通人都能想出来,所以这三个算法算是排序算法里最普通的了:)后面会介绍时间复杂度更优的算法,如快排、归并及堆排序,他们的时间复杂度为O(nlog(n))

插入、冒泡与选择排序现在已经从《算法导论》里面移除了,难道作者觉得太简单,没有讲解的必要了吗(捂脸哭)。

插入排序的思想的确相当之简单,就像我们给扑克牌排序一样,我们摸到新牌时,假设从小到大排列,会依次往前比较,然后插入到一个 比前面牌大,比后面牌小 的位置上,这个位置就是这张新来的牌应该处于的位置。

插入排序类似于扑克牌的排序,图片来自《大话数据结构》


由上动图,可以看出,这个算法除了比较操作,很大一部分时间消耗在了数组的移动上,假设我即将插入的是最小的元素(相对于已经排序好的部分,即图中所示黄色部分),那么不得不将此元素现在位置前的元素都向后挪一个位置,这是很浪费CPU时间操作,这也是此算法的瓶颈所在,即可能存在大量的数组元素搬迁动作。

下篇写堆排序,以及性能更优于堆排序的快速排序。

--END


以上是关于常用排序算法之插入排序的主要内容,如果未能解决你的问题,请参考以下文章

几种常用的排序算法之JavaScript实现

常用算法之----选择排序插入排序和希尔排序

常用排序算法之选择排序

七大排序算法之插入排序

Javascript之排序算法

常用排序算法之JavaScript实现