在排好序的数组,要求输入一个数后,按原来排序的规律将它插入其中。用c语言写编程。
时间: 2024-12-08 12:23:01 浏览: 26
在C语言中,可以使用二分查找法来确定新元素应该插入的位置,然后将元素插入到已排序的数组中保持有序。以下是简单的步骤和代码示例:
首先,我们需要一个函数来进行二分查找(binary search),用于找到给定值在已排序数组中的正确插入位置:
```c
int binary_search(int arr[], int low, int high, int key) {
if (high >= low) {
int mid = low + (high - low) / 2;
// 如果中间元素就是要找的值,直接返回其索引
if (arr[mid] == key)
return mid;
// 如果中间元素大于目标值,则在左半部分继续查找
if (arr[mid] > key)
return binary_search(arr, low, mid - 1, key);
// 否则在右半部分查找
return binary_search(arr, mid + 1, high, key);
}
// 如果未找到,返回数组长度作为插入位置
return high + 1;
}
```
接着,编写主函数,在数组末尾插入新元素:
```c
void insert_sorted_array(int arr[], int n, int num) {
int index = binary_search(arr, 0, n - 1, num);
memmove(&arr[index + 1], &arr[index], (n - index) * sizeof(int));
arr[index] = num;
}
```
这里的`memmove()`函数用于移动数组中的一部分元素,以便为新插入的元素腾出空间。
现在你可以按照下面的方式使用这两个函数:
```c
#include <stdio.h>
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int num = 4; // 或者其他需要插入的值
printf("Original array: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
insert_sorted_array(arr, n, num);
printf("\nArray after insertion: ");
for (int i = 0; i <= n; i++)
printf("%d ", arr[i]);
return 0;
}
```
运行这个程序,你会看到新值在保持原顺序的情况下被成功插入到数组中。
阅读全文