JAVA基础
题目
public class ArraySort {
public static void main(String[] args){
/*
* 任务:升序数组插入一个数后任然是升序
* 分析:
* 1.新建扩容后的大数组
* 2.将小数组复制大大数组中并和待插入数值比较
* 3.若数值一小于待插入数值,数值二小于待插入数值则三数插入
* 4.灵活优化*/
//bug:当插入数值大于数组中最大数时出错!!!!
int[] arr = {5,10,22,27,45,66,77};//j
//新建大数组,便于添加新数据
int[] arr1 = new int[arr.length+1];
//定义插入数值
int c = -1;
int number = 90;
//一步循环实现小数组到大数组的复制
for(int i = 0 , j = 0; j<arr.length; i++ , j++){
//判断,若复制的数值小于待插入数值则先将小的复制
if(number > arr[j]){
if(j ==arr.length-1 && c==-1){
arr1[i] = arr[j];
arr1[i+1] = number;
break;
}
arr1[i] = arr[j];
//若复制数值大于待插入数值,则先插入待插入数值,复制的数值插入其后
//直接循环会造成数值错位(后插入的数值占用了下一个循环的位置)先跳过
//这一位即i++,
}else{
arr1[i] = number;
arr1[i+1] = arr[j];
i++;
c = 0;
//再次循环还会执行number与复制数值的比较,会出错。所有直接把
//number变成数组中最大的值,后续则不会影响。
number = arr[arr.length-1]+1;
}
}
//遍历输出
for(int k = 0; k<arr1.length; k++){
System.out.print(arr1[k] + " ");
}
}
}