有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中,用c语言程序
时间: 2024-12-13 14:25:55 浏览: 5
在C语言中,为了在一个已排序的数组中插入一个新元素并保持原有的顺序,可以采用二分查找法找到合适的位置,然后通过数组操作插入。以下是简单的步骤:
1. 定义一个函数,如`insert_sorted_array`,接收两个参数:已排序的整型数组`arr`、数组长度`n`以及需要插入的值`key`。
```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 - low) / 2;
if (arr[mid] == key)
return mid; // 找到key就返回下标
if (arr[mid] < key)
low = mid + 1; // 如果中间元素小于key,更新左边界
else
high = mid - 1; // 否则更新右边界
}
return low; // 如果没找到,返回适当位置(最左边大于key的位置)
}
// 插入函数
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; // 将新元素插入到正确位置
}
// 测试函数
void print_array(int arr[], int n) {
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main() {
int arr[] = {1, 3, 5, 6, 8};
int n = sizeof(arr) / sizeof(arr[0]);
int key;
printf("Enter a number to be inserted: ");
scanf("%d", &key);
insert_sorted(arr, n, key);
printf("Array after insertion: \n");
print_array(arr, n);
return 0;
}
```
在这个程序中,我们首先通过`binary_search`找到新元素应该插入的位置,然后使用循环将后续元素向右移动,并将新元素放在该位置上。
阅读全文