用c语言在一个有序的数组中插入一个数,使之仍然保持有序(用函数实现)
时间: 2024-12-19 20:23:34 浏览: 19
在C语言中,你可以创建一个函数来在已排序的数组中插入一个新元素,通常会采用二分查找法来找到合适的位置。这里是一个简单的函数实现示例:
```c
#include <stdio.h>
// 定义一个比较函数,用于数组排序
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
// 在有序数组中插入元素的函数
void insertInSorted(int arr[], int n, int value) {
// 如果数组为空,直接添加到开头
if (n == 0) {
arr[0] = value;
return;
}
// 使用二分查找找到插入位置
int i = 0, j = n - 1;
while (i <= j) {
int mid = i + (j - i) / 2;
if (arr[mid] > value)
j = mid - 1; // 插入点在mid左边
else
i = mid + 1; // 插入点在mid右边
}
// 将值插入到正确的位置,并移动其他元素
for (int k = n; k > i; k--) {
arr[k] = arr[k - 1];
}
arr[i] = value;
}
// 测试函数
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int value = 4;
printf("Original array:\n");
printArray(arr, n);
insertInSorted(arr, n, value);
printf("Array after inserting %d:\n", value);
printArray(arr, n);
return 0;
}
```
这个程序首先检查数组是否为空,然后使用二分查找找到插入位置,最后将值插入并调整数组。当你运行`main`函数,它会在已有的有序数组{1, 3, 5, 7, 9}中插入数字4。
阅读全文