有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。java
时间: 2023-11-05 22:22:00 浏览: 76
可以使用二分查找法找到新插入数字在数组中的插入位置,然后将该位置后面的数字都后移一位,最后将新数字插入到该位置即可。
以下是示例代码:
```java
public static void insert(int[] arr, int num) {
int left = 0;
int right = arr.length - 1;
int mid;
while (left <= right) {
mid = (left + right) / 2;
if (num < arr[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
// 此时 left 即为插入位置
for (int i = arr.length - 1; i > left; i--) {
arr[i] = arr[i - 1];
}
arr[left] = num;
}
```
可以通过调用该方法将新数字插入已排好序的数组中:
```java
int[] arr = {1, 3, 5, 7, 9};
int num = 4;
insert(arr, num);
System.out.println(Arrays.toString(arr)); // [1, 3, 4, 5, 7, 9]
```
相关问题
java有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
好的,这是一个比较经典的数组插入问题。
假设已经有一个按从小到大排序好的数组arr,需要将一个新元素num插入到数组中,使得插入后的数组仍然是从小到大排序的。
那么我们可以采用以下的算法:
1. 定义一个新数组newArr,长度比原数组arr多1,用于存放插入后的结果。
2. 遍历原数组arr,同时比较当前元素与新元素num的大小,将其插入到新数组newArr中。
3. 如果新元素num比当前元素小,则将newArr中的当前位置设为num,并将原数组剩余部分依次插入到newArr中。
4. 如果新元素num比当前元素大,则直接将当前元素插入到newArr中。
5. 最后返回新数组newArr即可。
以下是Java代码实现:
```java
public static int[] insert(int[] arr, int num) {
int[] newArr = new int[arr.length + 1];
int i = 0;
for (; i < arr.length; i++) {
if (num < arr[i]) {
newArr[i] = num;
break;
} else {
newArr[i] = arr[i];
}
}
if (i == arr.length) {
newArr[i] = num;
} else {
for (int j = i; j < arr.length; j++) {
newArr[j+1] = arr[j];
}
}
return newArr;
}
```
注意,上述代码中假设原数组arr从小到大排序。如果从大到小排序,只需要将if和else分支中的比较符号(<、>)调换即可。
Java有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
可以使用插入排序的思想来解决这个问题:
1. 先创建一个新数组,长度比原数组长1。
2. 遍历原数组,找到新数应该插入的位置。
3. 将原数组中该位置及之后的元素都向后移动一个位置。
4. 将新数插入到新数组的相应位置。
5. 将原数组中的元素复制到新数组中。
以下是Java代码实现:
```java
public static int[] insert(int[] arr, int num) {
int[] newArr = new int[arr.length + 1];
int i = 0;
while (i < arr.length && arr[i] < num) {
newArr[i] = arr[i];
i++;
}
newArr[i] = num;
while (i < arr.length) {
newArr[i+1] = arr[i];
i++;
}
return newArr;
}
```
输入原数组和新数,调用该方法即可得到插入后的新数组。
阅读全文