C语言中有一个已经排好序到数组。怎样先输入一个数,要求按照原来的规律将它插入数组中。
时间: 2024-10-14 20:05:10 浏览: 20
在C语言中,如果你有一个已排序的数组,想要按照原有的顺序插入一个新的元素,你可以采用二分查找法确定新元素应该插入的位置,然后通过数组的下标操作完成插入。以下是大致步骤:
1. **二分查找**:
- 确定搜索区间的起始和结束点,通常分别为0和数组长度减1。
- 比较中间元素与你要插入的数值,如果中间元素大于新值,则在左半部分继续查找;如果小于或等于新值,则在右半部分查找。
- 重复此过程直到找到合适的位置。
2. **插入元素**:
- 找到位置后,将原数组中最后一个元素移到该位置,腾出空间。
- 将新值放入刚刚空出来的位置。
3. **更新长度**:
- 数组的新长度加一,表示新元素插入成功。
下面是一个简单的示例代码片段(假设数组名为`sorted_array`,数组长度为`length`,新值为`new_num`):
```c
#include <stdio.h>
int binary_search(int arr[], int length, int new_num) {
int low = 0, high = length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] > new_num)
high = mid - 1;
else
low = mid + 1;
}
return low; // 返回新值应插入的位置
}
void insert_sorted(int arr[], int length, int new_num) {
arr[length] = new_num; // 新值放在最后
int index = binary_search(arr, length, new_num);
for (int i = length - 1; i >= index; i--) {
arr[i+1] = arr[i]; // 向后移动元素
}
arr[index] = new_num; // 将新值放回正确位置
}
// 示例
int main() {
int sorted_array[] = {1, 3, 5, 7, 9};
int length = sizeof(sorted_array) / sizeof(sorted_array[0]);
int new_num = 6;
insert_sorted(sorted_array, length, new_num);
printf("Sorted array with inserted number: ");
for (int i = 0; i <= length; i++) {
printf("%d ", sorted_array[i]);
}
return 0;
}
```
阅读全文