插入排序:保护一个有序区,把元素一个个插入有序区的适当地位,直到所有元素都有序为止。
例子:无序数组:[5,8,6,3,9,2,1,7]
第一轮:让元素8和有序区[5]的元素顺次比拟。
8>5,所以元素8和元素5毋庸替换。
此时有序区的元素减少到两个:[5,8]
第二轮:让元素6和有序区[5,8]的元素顺次比拟。
6<8,所以把元素6和元素8进行替换。
6>5,所以元素6和元素5毋庸替换。
此时有序区的元素减少到3个:[5,6,8]
第三轮:让元素3和有序区的元素顺次比拟
3<8,所以把元素3和元素8进行替换
3<6,所以把元素3和元素6进行替换
3<5,所以把元素3和元素5进行替换
此时有序区的元素减少到了四个[3,5,6,8]
优化:
第三轮循环,把元素用inserValue存起来,把有序区的元素从前向后逐个复制。
第1步:暂存元素3,inserValue
第2步:和前一个元素比拟,因为3<8,复制元素8到它下一个地位。
第3步:和前一个元素比拟,因为3<6,复制元素6到它下一个地位。
第4步:和前一个元素比拟,因为3<5,复制元素5到它下一个地位。
第5步:把暂存的元素3赋值到数组的首位。