二分插入法
已知, 目前有一个已正序排好的9个元素的数组,
现在输入一个数
要求按原来排序的规律将它插入数组中。
输入:
第一行, 9个整数, 表示已经排好序的数组
第二行: 一个整数 表示需要被插入的数字
输出:
插入数字后的数组
样例输入:
1 7 8 17 23 24 59 62 101
50
样例输出:
1 7 8 17 23 24 50 59 62 101
//参考了路过的假面骑士的代码,感谢
public class Task1028 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//根据题目要求,先要有9个正序排列的数字,因为中间要加入一个数字,所以创建一个10个元素的数组
int[] nums = new int[10];
int temp = -1; //状态
System.out.println("请依次输入9个数字,并保持正序排列");
for (int i = 0; i < 9; i++) {
nums[i] = input.nextInt();
if(nums[i] > temp) {
temp = nums[i];
} else {
i--;
}
}
System.out.println("请输入一个要插入的数字");
int a = input.nextInt();
int left = 0;
int right = 8;
int index = -1; //要插入的位置
while (nums[left] <= nums[right]) {
int mid = left + (right - left) / 2;
if(a == nums[mid]) {
index = mid;
} else if(a > nums[mid]) {
left = mid + 1;
} else if(a < nums[mid]) {
right = mid - 1;
}
index = left;
}
for(int i = 9; i > index; i--) {
nums[i] = nums[i-1];
}
nums[index] = a;
System.out.println(Arrays.toString(nums));
}
}
//功能实现了,整体效果不是很好,回头在整理几份
可以用sort() 方法自动排序的