直接插入排序是在一个有序的序列中插入一个记录,从而得到一个新的有序表。
一般情况下,第i趟直接插入排序会进行以下操作,在含有i-1个记录的有序序列ar【1..i-1】中插入一个记录ar【i】后,变成含有i个记录的有序子序列ar【1..i】通常情况下会有一个监视哨(通常会把arr【0】空出来作为监视哨),在从第i-1个记录往前搜索的过程中,同时后移记录,直到找到第i个记录所在的位置,整个排序过程要进行i-1趟插入过程,先将序列中的第一个元素看作一个有序序列,然后从第二个记录开始依次插入,算法代码如下(该代码监视哨用变量temp而非arr【0】)
如果是一个数组要使用直接插入排序的话,显然0下标的位置不会空出来,这时可以另外设置一个监视哨。
我们用一维整型数组{3,5,2,4,7,0,9,6,8}为例来说明该排序过程
首先我们把3看作一个有序序列,把5插入该有序序列形成下图第二行用黑色下划线标注的有两个记录的有序序列{3,5}过程中i为1,由于5比3大,因此直接执行下一次循环,插入2时i为2,2小于5,把2放入监视哨中(红色方框内为监视哨),然后从i-1的位置向前遍历并将该位置元素后移(要比较的数已经放入监视哨中,不会被覆盖),直到找到其合适的位置将其插入,然后依次插入剩余所有元素即是直接插入排序的所有步骤