算法思想:
简而言之:插入排序就是将一个待排序元素插入到前面已经排好序的序列之中。
代码实现
实现一:
实现二(带哨兵):
将带排序的元素放在索引为0地方,如果遍历至0处则退出第二个for循环,就不用判断索引小于0的情况。
算法效率分析:
插入排序的优化问题:
图解:
由于待排序元素前面一定是有序的,且使用的存储结构是顺序存储时,则可以使用折半查找来查找数据的插入位置。
如上,要将low指向的数据至i-1的数据依次向后移动一位,将i插入到low处
待排序的元素(60)和mid指向的元素相同,此时不停止查找,而是在其右半区间继续搜索
要将low指向的数据至i-1的数据依次向后移动一位,将i插入到low处
……(省略很多步骤)
low>i-1不移动
……(省略很多步骤)
要将low指向的数据至i-1的数据依次向后移动一位,将i插入到low处