操作步骤
1、将序列分为有序序列和无需序列两个部分
2、在有序序列R[1…i-1]中查找R[i]的插入位置,满足R[1…j]的值都小于等于R[i],R[j+1…i-1]的的值都大于R[i]
3、将R[j+1…i-1]都向后移动一个位置
4、将R[i]插入到R[j]的位置上
代码实现
for(int i = 2;i<=length;i++){
//从2开始,因为默认1是有序的
r[0] = r[i];//将待插入记录放在监视哨中
j = i-1;
while(r[0]<r[j]&&j>0){//当r[0]的值比r[j]的值小
r[j+1] = r[j]//我们把r[j]的值向后移动一位
j--;
}
//当r[i]的值大于等于r[j]的值
r[j+1] = r[0]//就让i在j的背后
}
问题:插入排序为什么是从后往前找?
因为这样可以在寻找位置的同时把不符合条件的元素的往后挪,避免了多写一个for循环把数组后面的元素往后移的尴尬。