编程:有一个已排好序的数组 要求输入一个数后 ,按原来排序的规律将它插入数组中。 用c语言编写
时间: 2024-11-29 22:16:03 浏览: 42
在 C 语言中,你可以通过二分查找法来找到合适的位置,然后插入给定的数,保持数组的有序性。以下是一个简单的示例,假设我们有一个整型数组 `arr` 和其长度 `n`:
```c
#include <stdio.h>
// 二分查找函数
int binary_search(int arr[], int n, int x) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
// 如果x小于中间元素,则在左半部分继续查找
if (arr[mid] > x)
high = mid - 1;
// 如果x大于中间元素,则在右半部分继续查找
else if (arr[mid] < x)
low = mid + 1;
// 如果找到目标位置,返回mid+1(因为需要插入元素在该位置之后)
else
return mid; // x is already in array
}
// 如果x大于所有元素,将其插入在最右侧
return low;
}
// 插入函数
void insert_sorted_array(int arr[], int n, int x) {
int index = binary_search(arr, n, x);
if (index != n) {
// 将所有从index到n-1的元素向右移动一位
memmove(&arr[index + 1], &arr[index], sizeof(int) * (n - index));
arr[index] = x; // 插入x
} else {
// 如果找到了插入点是n,即已经是最右边,直接添加
arr[n] = x;
}
printf("Array after insertion: ");
for (int i = 0; i < n + 1; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int arr[] = {1, 3, 5, 6, 8, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 7;
insert_sorted_array(arr, n, x);
return 0;
}
```
阅读全文