a 插入到一个长度不小于 10 且元素呈递增排列的一维数组中,并保证插 入之后的数组依然递增(若 a 在插入前的数组中存在,则输出提示并忽略)。
思路:
1、random类创建随机数组
2、冒泡排序拍好序
3、创建一个+1的新数组,且复制原来的数组
4、对要插入的数进行排序
代码:
public class MyText {
public static void main(String[] args) {
Random random=new Random(); //随机产生10个0到99的整数
int[]a=new int[10];
int temp;
boolean exchanged;
System.out.print("排列前的数组:");
for(int i=0;i<a.length;i++){
a[i]=random.nextInt(100);
System.out.printf("%-4d",a[i]); //打印数组
}
for(int i=0;i< a.length-1;i++){ //冒泡排序
exchanged=false; //每轮排序前,初始化交换标志
for(int j=0;j<a.length-i-1;j++){
if (a[j] > a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
exchanged=true; //一轮交换后,交换标志改变
}
}
if(exchanged==false){ //如果当某轮交换后,交换标志未改变,说明已经拍好序了,直接终结循环
break;
}
}
System.out.print("\n排序后的数组:"); //打印排好序的数组
for(int i=0;i<a.length;i++){
System.out.printf("%-4d",a[i]);
}
int[] newArr= new int[a.length+1]; //新增加一个数组,长度加一
for(int i=0;i<a.length;i++){ //将原来的数组元素赋值给新数组
newArr[i]=a[i];
}
//键盘录入要插入的数字
Scanner sc = new Scanner(System.in);
//接收键盘录入的数字
int num = sc.nextInt();
//得到插入的数字应该在新数组中的索引位置
//定义插入元素的索引位置
int insert = 0;
for(int i = 0;i < newArr.length;i++){
//如果插入的数字大于newArr[index],则insert = i;
if(num==newArr[i]){
System.out.println("输入字已占有");
}
if(num < newArr[i]){
insert = i;
break;
}
}
//将newArr中的元素从要插入的索引位置开始向后移动一位
// 判断条件index>insert或者index>=insertIndex都可以
for(int index = newArr.length-1;index > insert; index--){
newArr[index] = newArr[index-1];
}
//将要插入的数存到集合中
newArr[insert] = num;
//打印排好序的数组
System.out.print("\n插入后的数组:");
for(int i=0;i<newArr.length;i++){
System.out.printf("%-4d",newArr[i]);
}
}
}
运行结果: