将右侧待排序的数据,逐个插到左边已排序的数据中的正确位置
初步认定第1个是已经排序好的,从第2个开始
先和左边排序好的最右边的数据比较大小
时间复杂度 n
附上JAVA代码
public void insert2(Integer[] a){
System._out.println(“开始前,a:” + Arrays.toString(a));
int value;//存储要比对的值
for (int i = 1; i < a.length; i++) {//从第2个开始,知道结束
value = a[i];//将要比对的值赋值给value
int j;
for (j = i; j > 0 ; j—) {//j是要排序的数,先和左边排序好的最右边的数据(j-1)比较大小,每次左移1位
//System.out.println(“i:” + i +”,j:” + j + “,a[j]:” + a[j] + “,a[j-1]:” + a[j-1]);
if(value < a[j-1]){//如果左边的值比较大
a[j] = a[j-1];//左边的值右移1位
}else{
break;
}
}
a[j] = value;//最后将比对的值赋值给结束为止
//System.out.println(“执行” + String.valueOf(i+1) + “次,a:” + Arrays.toString(a));
}
System.out.println(“开始后,a:” + Arrays.toString(a));
}
