插入排序总结(来自算法导论)

  自己总结的!什么是插入 排序 ,一直 感觉非常的 含糊不清。

下面 来做一个简单的总结,我因为不会 画图 ,所以用文字来进行总结,

如果有一个 未排序的数组,如果这个数组是 :0,22,11,55,2

那么 我们 怎么 来 进行排序呢,如果是使用 插入 排序。

首先 我们 要 构造一个循环,这个循环是从2~LENGTH。

为什么是从2开始,而不是从1开始呢?

因为第一个元素无论如何是不需要 排序的,所以可以从2开始 进行排序。

当我们第一次排序的时候,那么 肯定是把第二个元素和第一个元素进行比较。

这次是进行 从小 到大的排序,好,我们 开始进行排序,第一次把第二个元素和第一个 元素 进行比较,

由于这“第二个”元素可以是第N个元素,所以 我们有必要记录一下下标,我们把这个第N个元素的下标放到临时 变量 里面。

然后我们 开始从第N-1个元素进行比较,我们必须去移动1~N-1个元素的位置,当然是向后移动,

如果 元素这个第N个元素的值和 前面的值比较,如果 N-1(N是 变量)的值大于记录的值,那么我们先做的一件事 就是

把变量中的前一个元素的值赋给后一个,然后 下标减一,这样 就实现了元素后移,当然最大的后移下标是这次外层循环的下标 。

然后如果都KEY小于下标的值,那么循环结束,找到了和下标匹配的最大元素的值。

然后把KEY值赋给这个下标的后一位值(这里还是不太明白 ),为什么这样呢?

因为 外层循环其实是从第一项 开始的,而这里的里层循环是从0开始的!所以我们最多只能把这个值赋给第一项,而不是第0项!

照这个思路理解,其实我们是给第1项到 第N项进行了排序!不知道 我理解得对不对!

然后其他的就 依次类推 了 吧。

原文地址:https://www.cnblogs.com/kmsfan/p/4765907.html