/*
有一个已经排好序的数组。现输入一个数,要求按照原来的排序规则
将它插入到数组中。
*/
import java.util.Arrays;
class Demo
{
private Demo(){}
private static Demo instance = new Demo();
public static Demo getInstance()
{
return instance;
}
public int[] insertArr(int[] arr, int n)
{
//int[] newarr = new int[arr.length+1];
//偷懒的写法,只能处理升序数组
/* int[] a = Arrays.copyOf(arr, arr.length+1);
a[a.length-1] = n;
Arrays.sort(a);
return a;
*/
//int ret = Arrays.binarySearch(arr, n);//二分法查找,找到n时返回插入点脚标;没找到n时就返回
//-插入点脚标-1
//判断ret的正负值来继续操作。
//常规写法
int[] newarr = new int[arr.length + 1];
int index = 0;
for(int i = 0; i < arr.length; i++)
{
if(n <= arr[i]) //从左向右升序冒泡
{
index = i;
break;
}
}
//循环将旧数组的值复制到新数组中
for(int i = 0; i < index; i++)
{
newarr[i] = arr[i];
}
newarr[index] = n;
for(int i = index+1; i < newarr.length; i++)
{
newarr[i] = arr[i-1];
}
return newarr;
}
}
class MainClass
{
public static void main(String[] args) throws Exception
{
Demo d = Demo.getInstance();
int[] arr = {100,200,300,400,500};
int n = 900;
System.out.println("插入前的数组元素:");
for(int i = 0; i < arr.length; i++)
{
System.out.print(arr[i]+"\t");
}
int[] newarr = d.insertArr(arr, n);
System.out.println("\n插入后的数组元素:");
for(int i = 0; i < newarr.length; i++)
{
System.out.print(newarr[i]+"\t");
}
}
}
/*
*/