编写一个程序,一个整形数组按升序排列,插入一个整数仍然升序
时间: 2024-12-08 13:22:53 浏览: 15
当你需要在已排序的整数数组中插入一个新的元素并保持升序时,你可以使用二分查找法找到插入位置,然后将数组中的元素后移。这里是一个简单的C++示例:
```cpp
#include <iostream>
using namespace std;
// 定义比较函数用于升序判断
bool compare(int a, int b) {
return a < b;
}
void insertInSortedArray(int arr[], int n, int value) {
// 使用二分查找确定插入位置
int low = 0;
int high = n - 1;
int index;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == value)
break; // 如果值已经存在,直接跳出循环
else if (compare(arr[mid], value))
high = mid - 1; // 值比中间大,搜索左半边
else
low = mid + 1; // 值比中间小,搜索右半边
}
// 插入新值
for (int i = n - 1; i >= index; --i)
arr[i + 1] = arr[i];
arr[index] = value; // 将新值放在正确的位置
cout << "Array after insertion: ";
for (int i = 0; i <= n; ++i)
cout << arr[i] << " ";
cout << endl;
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int value = 6;
insertInSortedArray(arr, n, value);
return 0;
}
```
这个程序首先定义了一个比较函数`compare()`确保数组始终按升序排列。接着,在`insertInSortedArray()`函数中,我们使用二分查找找到合适的插入位置,然后用一个临时数组倒序移动所有大于等于目标值的元素,最后将新值插入。
运行此程序,你会看到原数组(1, 3, 5, 7, 9)在插入6之后变为(1, 3, 5, 6, 7, 9)。
阅读全文