有一个已排好序的数组 要求输入一个数后 按原来排序的规律将它插入数组中。 用c语言写出。
时间: 2024-10-16 22:03:41 浏览: 49
数组应用举例求出十个数中的最大数-C语言数组教学
在 C 语言中,你可以使用二分查找法(Binary Search)来找到合适的位置,然后将新元素插入到有序数组中保持原有的排序顺序。以下是一个简单的示例:
```c
#include <stdio.h>
// 定义函数进行二分查找
int binary_search(int arr[], int n, int key) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
// 如果key比中间元素大,说明应该在右半部分继续查找
if (arr[mid] < key)
low = mid + 1;
// 否则,在左半部分查找
else
high = mid - 1;
}
return low; // 返回新元素应插入的位置
}
// 函数用于插入新元素并保持排序
void insert_sorted(int arr[], int n, int key) {
int index = binary_search(arr, n, key);
// 将原元素向后移动一位,腾出位置
for (int i = n - 1; i >= index; i--) {
arr[i + 1] = arr[i];
}
// 插入新元素
arr[index] = key;
}
// 测试函数
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int new_key;
printf("Enter a number to be inserted: ");
scanf("%d", &new_key);
insert_sorted(arr, n, new_key);
printf("Array after insertion: \n");
for (int i = 0; i <= n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在这个程序中,用户会被提示输入一个数字,`insert_sorted` 函数会找到这个数字应在有序数组中的适当位置,并将其插入,同时保持数组的有序性。
阅读全文