给定一个从小到大的有序的整数序列,将其保存至数组,另外输入一个整数,将其插入这个数组中,并保持数组有序,用C语言实现
时间: 2024-12-19 17:26:30 浏览: 6
判断整数序列是否为二元查找树的后序遍历结果的解决方法
在C语言中,你可以使用二分查找法来快速定位插入位置,然后将新元素插入。以下是简单的步骤:
```c
#include <stdio.h>
// 插入函数,维护有序数组
void insert(int arr[], int n, int key) {
int i; // 指针,从头开始找插入位置
for (i = 0; i < n && arr[i] < key; i++) {} // 找到第一个大于key的位置
// 如果找到了,把key放在找到的位置上,同时移动后面的元素
if (i != n) {
memmove(&arr[i + 1], &arr[i], sizeof(arr[0]) * (n - i)); // 使用memmove防止数据丢失
arr[i] = key;
}
else { // 如果数组已满,直接添加在最后
arr[n] = key;
n++; // 数组大小加一
}
}
// 主函数示例
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 6; // 需要插入的数字
printf("原有序列: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
insert(arr, n, key);
printf("\n插入 %d 后的顺序: \n", key);
for (int i = 0; i <= n; i++) {
printf("%d ", arr[i]); // 注意这里用<=,因为n可能增大了
}
return 0;
}
```
在这个例子中,我们首先打印出原始数组,然后调用`insert`函数插入`key`,接着再次打印新的有序数组。
阅读全文