N 个整数从小到大排列,输入一个新数插入其中,使 N+1 个整数仍然有序
时间: 2024-05-15 18:20:01 浏览: 88
可以采用二分查找的方法找到新数的插入位置,然后将其插入到数组中。
具体方法如下:
1. 使用二分查找法找到新数应该插入的位置,可以先比较新数与中间位置的数的大小,如果新数小于中间位置的数,则在左半部分继续查找,否则在右半部分继续查找,直到找到插入位置。
2. 将插入位置后面的数依次往后移动一个位置,空出插入位置。
3. 将新数插入到空出的位置上。
代码实现如下:
```
#include <iostream>
using namespace std;
int binarySearch(int arr[], int low, int high, int x)
{
if (high <= low) {
return (x > arr[low]) ? (low + 1) : low;
}
int mid = (low + high) / 2;
if (x == arr[mid]) {
return mid + 1;
}
if (x > arr[mid]) {
return binarySearch(arr, mid + 1, high, x);
}
return binarySearch(arr, low, mid - 1, x);
}
void insert(int arr[], int& n, int x)
{
int pos = binarySearch(arr, 0, n - 1, x);
for (int i = n - 1; i >= pos; i--) {
arr[i + 1] = arr[i];
}
arr[pos] = x;
n++;
}
int main()
{
int arr[100], n, x;
cout << "Enter number of elements: ";
cin >> n;
cout << "Enter " << n << " elements: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
cout << "Enter new element: ";
cin >> x;
insert(arr, n, x);
cout << "New array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
阅读全文