public class AscendingOrder{
public static void main(String[] args){
//已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序
//比如:[1,2,4,5],添加3后,数组为[1,2,3,4,5]
/*
思路(扩容 + 定位)
1.先确定添加的数应该插入到哪个索引
2.扩容
*/
int[] arr = {1,2,4,5};
int insertNum = 12;
int index = -1; //就是要插入的位置
//遍历 arr ,如果发现 insertNum <= arr[i],说明 i 就是要插入的位置
//使用 index 保留 index = i;
//如果遍历完,没有条件成立 insertNum <= arr[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;
}
//扩容
int[] arrNew = new int[arr.length + 1];
// i 控制arrNew的下标,j用来控制 arr 数组的下标
for(int i = 0,j = 0;i < arrNew.length;i++){
if(i != index){ //说明可以把 arr 的元素拷贝到arrNew
arrNew[i] = arr[j];
j++;
}else{ //i这个位置要插入的数
arrNew[i] = insertNum;
}
}
//让 arr 指向 arrNew,原来的数组,就会被销毁
arr = arrNew;
System.out.println("插入后的元素情况");
for(int i = 0;i < arr.length;i++){
System.out.print(arr[i] + "\t");
}
}
}
升序数组插入数字,结果依然为升序数组
最新推荐文章于 2024-07-20 09:21:06 发布