ava程序写有一个已经排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中
时间: 2023-12-01 07:18:35 浏览: 72
有一个已排好序的数组,今输入一个数,要求按排序的规律将它插入数组中。
可以使用二分查找来找到要插入的位置,然后将后面的元素向后移动一位,最后将要插入的元素插入到对应的位置上。以下是一个使用二分查找实现的示例代码:
```java
public class InsertIntoSortedArray {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9};
int num = 4;
int[] newArr = new int[arr.length + 1];
int insertIndex = binarySearch(arr, num);
// 将后面的元素向后移动一位
for (int i = arr.length - 1; i >= insertIndex; i--) {
newArr[i + 1] = arr[i];
}
// 插入元素
newArr[insertIndex] = num;
// 将前面的元素复制到新数组中
for (int i = 0; i < insertIndex; i++) {
newArr[i] = arr[i];
}
// 输出新数组
for (int i = 0; i < newArr.length; i++) {
System.out.print(newArr[i] + " ");
}
}
// 二分查找要插入的位置
public static int binarySearch(int[] arr, int num) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == num) {
return mid;
} else if (arr[mid] > num) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
}
```
在这个示例代码中,我们定义了一个已经排好序的数组 `arr` 和要插入的数 `num`。首先,我们创建一个新数组 `newArr`,长度比原来的数组多一个。然后,我们使用 `binarySearch` 方法找到要插入的位置。如果要插入的数已经存在于原数组中,那么它会被插入到它的后面。接着,我们使用 for 循环将后面的元素向后移动一位。然后,我们将要插入的元素插入到对应的位置上,并使用 for 循环将前面的元素复制到新数组中。最后,我们输出新数组中的元素,即为插入元素后的有序数组。
需要注意的是,在使用二分查找时,如果要插入的数已经存在于原数组中,那么它会被插入到它的后面,这是因为二分查找查找到的是第一个大于要插入的数的位置。如果要插入的数不在原数组中,那么它会被插入到对应的位置上。
阅读全文