用c语言写出有一个已经排好序的数组,要求输入一个数,按原来排序的规律将它插入数组中
时间: 2024-11-03 19:19:53 浏览: 56
在C语言中,为了将一个已排序的数组按照一定的规则插入一个新元素,你可以使用二分查找法来找到合适的位置,然后插入。以下是步骤和示例代码:
首先,假设数组 `arr` 已经排好升序,我们要插入的元素为 `num`。
1. 定义函数 `binary_search()` 进行二分查找:
```c
int binary_search(int arr[], int left, int right, int num) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == num) {
return mid; // 找到了相同的值,返回索引
} else if (arr[mid] < num) {
left = mid + 1; // 如果中间元素小于num,移到右半部分
} else {
right = mid - 1; // 否则移到左半部分
}
}
// 如果没找到相等的元素,应该插入到左边界或右边界之后
return left; // 返回适当的插入位置
}
```
2. 主函数中插入元素:
```c
void insert_sorted_array(int arr[], int n, int num) {
int pos = binary_search(arr, 0, n - 1, num);
// 移动所有大于等于pos的元素一位
for (int i = n - 1; i >= pos; i--) {
arr[i + 1] = arr[i];
}
// 插入新元素
arr[pos] = num;
}
// 示例:
int main() {
int sorted_arr[] = {1, 3, 5, 7, 9};
int n = sizeof(sorted_arr) / sizeof(sorted_arr[0]);
int num = 4; // 要插入的数
insert_sorted_array(sorted_arr, n, num);
// 打印插入后的数组
for (int i = 0; i <= n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
当你运行这个程序,会看到新插入的数`num`保持了原有的排序顺序。注意,如果`num`已经在数组中,插入位置将是找到的第一个匹配项。
阅读全文