一、插入排序思想
从第二个元素开始依次与前边的元素做比较如果小于前边的元素就交换位置直到不小于为止。
步骤如下:
0、如[3,2,1]
1、从第二位开始2与3比较,2<3 交换位置,结果[2,3,1]
2、第三位1与它前一位3比较,1<3交换位置,结果[2,1,3]
3、1再与前一位2比较,1<2交换位置,结果[1,2,3]。此时完成排序
代码如下(insertion sort 00)
上述代码内循环采用的是元素交换的方式,看起来和"插入"并不十分契合,以下方式将内循环中的交换元素改成向后挪动较大元素的方式,可以减少访问数组的次数。代码如下(insertion sort 01)
二、特点
- 插入排序所需的时间取决于元素的初始状态
- 平均啥情况下需要N²/4次比较和N²/4次交换;最差需要N²/2次比较和N²/2次交换;最好的情况N-1次比较0次交换
- 插入排序对以下情况的初始状态元素排序很有效
1、每个元素距离它最终位置都不远
2、一个有序的大数组接一个小数组
3、所有元素中只有几个元素位置不正确