算法题--插入排序

Posted 昊小邦

tags:

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

    本期我们将会讲解初级排序算法中的最后一个--插入排序. 看懂了这一期的算法, 你在思维这方面就可以达到程序员的门槛了. 话不多说直接开始正题.

    插入排序的思想可以说就是摸扑克牌. 很多人都或多或少的打过扑克, 或看过别人打扑克. 那你还记得打扑克是怎样理牌的吗?

    理牌的过程应该是这样的. 首先抓到第一张牌后握在手中, 抓到第二张牌后与第一张作比较, 然后按照自己的习惯放置在其前或其后. 抓到第三张牌后与这两张作比较, 之后放到合适的位置. 反复此过程直到抽完牌结束.

    可以说会打扑克就会插入排序. 如图是一串被打乱的数字.

    现在我们要让它实现从小到大排列. 第一个位置的数字5, 就可以看作是排好序的手中的牌. 后面的7个数字可以看作是无序的牌堆. 那接下来就可以进行插入排序了.

    首先, 从第二个位置开始. 将3与5进行比较. 3<5, 将3插入到5的前面.

算法题--插入排序

    第二步, 将1与5进行比较, 1<5, 再将1与3进行比较, 1<3. 所以1插入到3之前.

算法题--插入排序

    第三步, 将8与5进行比较, 8>5, 不用变位置.

算法题--插入排序

    第四步, 将4与8进行比较, 4<8. 4与5进行比较, 4<5. 4与3进行比较4>3

, 将4插入到3与5的中间.

算法题--插入排序

    第五步, 将2与8进行比较,2<8. 将2与5进行比较2<5. 将2与4进行比较2<4. 将2与3进行比较2<3. 将2与1进行比较2>1. 所以将2插入到1与3之间.

算法题--插入排序

    第六步, 将7与8进行比较, 7<8. 将7与5进行比较7>5. 将7插入到5, 8之间.

    第七步, 将6与8进行比较, 6<8. 将6与7进行比较6<7. 将6与5进行比较6>5

. 将6插入到5, 7之间.

    如此循环一遍, 就可以实现排序的操作. 在这里博主要稍微讲解一下关于代码的编写. 如果没有编程基础的可以忽略. 有编程基础的可以看一看. 在插入排序中的插入操作是怎样通过代码实现的. 

    其实很简单. 假设所有数字存在一个数组中. 用一个变量x存储当前位置的数字. 假设当前位置的索引是4号. 就用x存储4号的数字. 然后向前一直比较. 如果3号位置的数字大, 就用3号位置的数字赋值给数组中的4号位. 如果2号位置的还大, 就把2号位置的数字赋值给数组中的3号位. 通俗来讲就是后移. 如果正巧1号位的数字小于x存储的那个4号数字.就把x存的值赋值给2号位. 大白话翻译就是先用一个变量保存当前数值, 这样当前位置就可以当作是空出来了. 然后往前进行比较, 比变量值大的后移一位. 遇到比变量值小的(假设是第1个数)就把变量值赋值给第2个数. 因为第2个数比变量值大, 已经后移了. 原来2号位就可以看作是空出来了.

    下一期, 博主会介绍一个比较高级的排序算法--快速排序. 因为我们这几期讲的算法虽然都能实现排序, 但是速度实在是慢, 为了实现高效率, 我们不得不考虑别的算法, 而快速排序就是一种比较高速的排序算法. 时间复杂度可以达到 O(N*logN) . 你有没有一点期待呢? 好了我们下期见.

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

插入类排序—(折半)插入排序希尔排序

Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序

Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序

排序算法—— 直接插入排序二分插入排序

算法面试章-排序:彻底拿下插入排序和冒泡排序

Insertion 插入排序算法