数组插入练习
已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序,比如:
[10,12,45,90],添加22后,[10,12,22,45,90]
/*
思路:本质是数组的扩容+定位
1、先确定添加数应该插入到那个索引
2、然后扩容*/
public class Homework04 {
public static void main(String[] args) {
int[] arr = {10, 12, 45, 90};
int insertNum = -1;
int index = -1;//index就是要插入的位置
//遍历arr数组,如果发现insertNum <= arr[i],说明i就是要插入的位置
//使用index将i保留起来,index = i;
//如果遍历完后没有发现条件成立,说明index = arr.length,即添至最末
for (int i = 0; i < arr.length; i++) {
if (insertNum <= arr[i]) {
index = i;
break;//跟后面比没有意义,发现第一个满足就可退出
}
}
//判断index值
if (index == -1) {//说明没有找到为位置
index = arr.length;
}
System.out.println("index=" + index);
//扩容
//先创建一个新的数组,大小arr.length+1;
int[] arrNew = new int[arr.length + 1];
//将arr的元素拷贝到arrNew,并且要跳过index位置
for (int i = 0, j = 0; i < arrNew.length; i++) {//此处j对应原数组,i对应新数组下标
if (i != index) {
arrNew[i] = arr[j];
j++;
} else {
arrNew[i] = insertNum;
}
}
//让arr指向arr.new,原来的数组成为垃圾被销毁
arr = arrNew;
System.out.println("====插入后,arr数组元素的情况====");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
巧妙使用 j ,i 一直在增加,j 在插入新值时并没有动。