//* 问题:Java中如何向一个已经升序排序好的数组中插入元素,得到的数组依然是升序数组
//* 效果:
//* int[] array = {1,3,7,12,24,36,48};
//* 插入数字9后新数组为
//* int[] newArray = {1,3,7,9,12,24,36,48};
理清一下思路:
1.创建一个新的数组(不要忘了数组创建方式)(扩容)
2.将原来数组的元素赋值给新数组(新数组比老数组多一个位置)
3.查找要插入数组的位置(要输入的数组元素小于被插数组的后一个数)
4.操作下标使原来数组中最后一个下标移动到空的位置,前一个往后一个移动(插队思想)
//* 问题:Java中如何向一个已经升序排序好的数组中插入元素,得到的数组依然是升序数组
//* 效果:
//* int[] array = {1,3,7,12,24,36,48};
//* 插入数字9后新数组为
//* int[] newArray = {1,3,7,9,12,24,36,48};
int [] array = {1,3,7,12,24,36,48}; //原数组
int [] newArray =new int[array.length+1]; //创建新数组,长度比原数组多1
for (int i = 0; i < array.length; i++) { //将原数组的元素赋值给新数组
newArray[i] = array[i];
}
System.out.print("请输入一个数:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt(); //键盘中录入需要插入的数
int index = -1; //定义要查找插入元素的位置下标
for (int j = 0; j < newArray.length; j++) {
if(num < newArray[j]) { //找到要插入为下标找到下标的的这个位置要比后面的数小(升序情况)
index = j ;
break;
}
}
if(index == -1) {
newArray[newArray.length -1] = num;
System.out.println("没找到下标");
}else {
//* 从后往前添加,newArray.length-1为数组的最后一位。
//* i一定小于 index,因为i要循环插入后的元素,所以小于插入元素的下标。
//* i--是因为从数组最大的下标开始,第二次循环是从最后倒是第二个下标开始移动往后移动
for(int i = newArray.length-1; i > index; i--) {
newArray[i] = newArray[i-1];
}
newArray[index] = num;
}
for(int i = 0; i < newArray.length; i++) {
System.out.println(newArray[i]);
}