Java中随机输入一个数,这个数将插入数组,使得数组依然是升序或者降序
代码和详解
public class HomeWorkFour
{
public static void main(String[] args)
{
/*
已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序
比如:[10,12,45,90],添加 23 后,该数组为[10,12,23,45,90]
思路分析
本质 数组扩容 + 定位
1. 我们先确定 添加数应该插入到那个索引
2. 然后扩容
*/
// 先定义原数组
byte[] arr = {
10, 12, 45, 90 };
byte insernum = 23;
byte index = -1; // index就是要插入到位置
/*
定位
遍历 arr 数组,如果发现 insernum <= arr[i],说明 i 就是要插入的位置
使用 index 保留 index = -i;
如果遍历完后,没有发现 insernum <= arr[i],说明 index = arr.length
即:添加到 arr 到最后
*/
for(byte i=0;i<arr.length;i++)
{
if(insernum<arr[i])
{
index = i;
break; // 找到就退出,因为数组为升序排列
}
}
// 判断 index 到值,以确定输入到数的位置
if(index==-1) // 说明还没有找到位置,则insernum大于整个数组元素,位置在最后一个
{
index = (byte) arr.length;
}
// 扩容
// 创建一个新的数组,大小 arr.length + 1
byte[] arrnew = new byte[arr.length + 1];
/*
下面将 arr 的元素拷贝到 arrnew,并且要跳过 index 位置
分析
byte[] arr = { 10, 12, 45, 90 };
arrnew = {[10],[12],[ ],[45],[90]};
*/
// i 用来控制 arrnew的下标,j 用来控制 arr的下标
for(byte i=0,j=0;i<arrnew.length;i++)
{
if (i != index) // 说明可以把 arr 的元素拷贝到 arrnew
{
arrnew[i] = arr[j];
j++;
}
else // i 这个位置就是要插入的数
{
arrnew[i] = insernum;
}
}
// 让 arr 指向 arrnew,原来的数组,就成为垃圾,被销毁
arr = arrnew;
System.out.println("=====插入后,arr数组的情况=====");
for (byte i = 0; i < arr.length;i++