import java.util.Arrays;
import java.util.Scanner;
public class Questions {
public static void main(String[] args) {
/**
* 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
*
* 实现思路:
* 1.定义一个排好序的数组
* 2.输入一个要插入的数
* 3.数组扩容,把输入的数放在数组的最后一个元素上
* 4.重新对扩容数组排序
*/
Scanner input = new Scanner(System.in);
//1.定义一个排好序的数组
//int[] nums = new int[] {45,67,76,89,100,150};
int[] nums = new int[] {45,23,21,20,19,8};
//输出原数组
System.out.println("排好序的数组为:");
printArr(nums);
//2.输入一个要插入的数
System.out.println("\n请输入一个数:");
int num = input.nextInt();
int len = nums.length;
//3.数组扩容,把输入的数放在数组的最后一个元素上
nums = Arrays.copyOf(nums, len+1);
/*************考虑升序排序第一种方法开始**************************/
//把输入的数放在数组的最后一个元素上
//nums[len] = num;
//4.重新对扩容数组排序
//Arrays.sort(nums);
/*************排序第一种方法结束**************************/
/*************考虑降序排序第二种方法开始**************************/
if(num<=nums[len-1]) {//如果数据大于等于最后一个数组,放最后
nums[len]=num;
}
else {
//找到插入的位置
int spaceIndex=-1;
for (int i = 0; i <= len; i++) {
if(num>=nums[i]) {
spaceIndex=i;
break;
}
}
//插入数据,插入到相应位置,其它元素后移
int temp;
for (int i = len; i >=spaceIndex ; i--) {
if(i==spaceIndex) {
nums[i] = num;
}
else {
temp = nums[i-1];
nums[i]=temp;
}
}
}
/*************排序第二种方法结束**************************/
//打印数据
System.out.println("\n将"+num+"插入数组中并排好序如下:");
printArr(nums);
}
private static void printArr(int[] nums) {
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
}
}
|