插入排序思想
- 在未排序中取一个值
a
,与已排序的数字从右到左逐一比较; - 若选出的数字
a
比已排序的数字b
小,则a
继续向左走,与比b
小的数字继续比较,而b
就立刻向右移占住一个坑位; - 若
a
比已排序的数字c
大,则停止搜索,将a
插入到c
后面。
思路形象记忆:
假设索引0在左边,则:
- 每论排序后得到一个最小值;
- 插入其实就是把未排序的数字中最小值插入到左边已经排序的数组的合适位置中,就是相当于黄色的队列排的好好的,你突然插到别人的队伍里面。
整体思路就是,找插队的位置,是位置。但是如何有效插队呢?就是利用队伍已经有序的特点,实现省去不必要的比较。
代码实现要注意的地方
- 考虑极端情况;
- 第一个for循环从1开始,因为共N-1轮,默认第0位已经在已排序队列中;
- 其实就是在找需要插入的位置,所以事先将要插队的值保存起来,方便后续其他值位置移动; <