把x插入到有序整形数组中,并保证插入后数组依然有序,用C语言写一个代码
时间: 2024-12-24 10:24:12 浏览: 5
在C语言中,如果你有一个已经排序的整型数组并且需要插入一个新的元素`x`保持数组有序,可以采用二分查找法找到合适的位置,然后进行插入操作。这里提供了一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 二分查找的辅助函数
int binary_search(int arr[], int low, int high, int x) {
if (high >= low) {
int mid = low + (high - low) / 2;
if (arr[mid] == x)
return mid;
else if (arr[mid] > x)
return binary_search(arr, low, mid - 1, x);
else
return binary_search(arr, mid + 1, high, x);
}
return -1;
}
// 插入元素并保持数组有序
void insert_sorted(int arr[], int n, int x) {
int index = binary_search(arr, 0, n - 1, x); // 查找插入位置
// 如果找到了相同元素,不需要插入
if (index != -1)
return;
// 否则,在末尾添加元素
arr[n] = x;
n++; // 更新数组长度
// 从末尾向已排序部分归并
for (int i = n - 1; i > 0 && arr[i] < arr[i - 1]; i--) {
arr[i] = arr[i - 1];
arr[i - 1] = x;
}
arr[i] = x; // 最终插入位置
}
int main() {
int arr[] = {1, 3, 5, 6, 8};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 4;
printf("Before insertion: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
insert_sorted(arr, n, x);
printf("\nAfter insertion: ");
for (int i = 0; i < n + 1; i++)
printf("%d ", arr[i]);
return 0;
}
```
阅读全文