C知道在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列,已知升序数组{1, 2, 4, 6, 8, 9, 12, 15, 149, 156 }。 输入格式: 直接输入一个整数,没有其它任何附加字符。。 输出格式: 输出插入元素后的升序数列,每个数输出占5列。
时间: 2025-01-19 10:04:25 浏览: 45
要在一个已按升序排列的数组中插入一个数,并保持数组的升序排列,可以使用以下步骤:
1. 找到插入位置。
2. 将插入位置及其后面的元素向后移动一位。
3. 将新元素插入到找到的位置。
以下是实现这一功能的Java代码:
```java
import java.util.Scanner;
public class InsertSortedArray {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] array = {1, 2, 4, 6, 8, 9, 12, 15, 149, 156};
int num = scanner.nextInt();
int index = findInsertionIndex(array, num);
insertElement(array, index, num);
printArray(array);
}
// 找到插入位置
public static int findInsertionIndex(int[] array, int num) {
int left = 0;
int right = array.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (array[mid] == num) {
return mid;
} else if (array[mid] < num) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
}
// 插入元素
public static void insertElement(int[] array, int index, int num) {
int[] newArray = new int[array.length + 1];
for (int i = 0, j = 0; i < newArray.length; i++) {
if (i == index) {
newArray[i] = num;
} else {
newArray[i] = array[j++];
}
}
// 将新数组的值赋给原数组
for (int i = 0; i < newArray.length; i++) {
array[i] = newArray[i];
}
}
// 打印数组
public static void printArray(int[] array) {
for (int num : array) {
System.out.printf("%5d", num);
}
}
}
```
### 解释:
1. **findInsertionIndex方法**:使用二分查找法找到插入位置。
2. **insertElement方法**:创建一个新数组,将原数组的元素和新元素插入到新数组中。
3. **printArray方法**:打印数组元素,每个元素占5列。
### 输入输出示例:
- 输入:`5`
- 输出:` 1 2 4 5 6 8 9 12 15 149 156`
阅读全文
相关推荐











