用c语言写一个在有序顺序表中插入两个元素代码
时间: 2024-09-17 14:06:22 浏览: 8
在C语言中,如果你有一个已经排序的顺序表(数组),通常我们会采用二分查找法找到插入位置,然后将新元素插入到适当的地方保持有序。这里是一个简单的示例,假设我们有一个整数数组`arr[]`和它的长度`size`:
```c
#include <stdio.h>
// 二分查找函数
int binary_search(int arr[], int size, int target) {
int left = 0;
int right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target)
return mid; // 找到了目标值,返回索引
else if (arr[mid] < target)
left = mid + 1; // 如果中间值小于目标,更新左边界
else
right = mid - 1; // 否则,更新右边界
}
return left; // 没找到,返回插入位置
}
// 插入函数
void insert_sorted(int arr[], int size, int element1, int element2) {
// 先插入第一个元素
int pos1 = binary_search(arr, size, element1);
memmove(&arr[pos1+1], &arr[pos1], sizeof(int)*(size-pos1));
arr[pos1] = element1;
// 然后插入第二个元素,找到第一个元素后面的位置
int pos2 = pos1 + 1 + binary_search(arr + pos1 + 1, size - 1, element2);
memmove(&arr[pos2+1], &arr[pos2], sizeof(int)*(size-pos2-1));
arr[pos2] = element2;
}
// 测试函数
void print_array(int arr[], int size) {
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int size = sizeof(arr) / sizeof(arr[0]);
insert_sorted(arr, size, 4, 6);
print_array(arr, size); // 输出: 1 3 4 5 6 7 9
return 0;
}
```
这个代码首先通过`binary_search`找到第一个元素应插入的位置,然后用`memmove`函数移动后面的元素以便插入新元素,最后再插入第二个元素。