用c语言写有一个排列好的数组,要求插入一个数字后,按原来排列的顺序重新排列
时间: 2024-11-14 07:24:29 浏览: 3
有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
在C语言中,如果你想在一个已经排好序的数组中插入一个新元素并保持原有的排序,你可以采用二分查找法找到合适的位置,然后对插入点后的数组进行后移操作。这里假设数组是升序排列。
以下是一个简单的示例,我们首先计算插入位置,然后通过数组下标操作完成插入:
```c
#include <stdio.h>
// 假设数组arr已排好序
int arr[] = {1, 3, 5, 6, 8}; // 示例数组
int n = sizeof(arr) / sizeof(arr[0]);
int target; // 要插入的新数值
void insert(int *arr, int n, int target) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
// 如果目标小于中间元素,则在左半部分继续查找
if (target < arr[mid]) {
high = mid - 1;
} else { // 目标大于等于中间元素,则在右半部分查找
low = mid + 1;
}
}
// 低索引就是目标应该插入的位置
int insert_index = low;
// 将后面的元素向后移动一位
for (int i = n - 1; i >= insert_index; i--) {
arr[i + 1] = arr[i];
}
// 插入目标值
arr[insert_index] = target;
}
int main() {
target = 4; // 需要插入的数字
printf("Original array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
insert(arr, n, target);
printf("\nAfter insertion: ");
for (int i = 0; i < n + 1; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这个程序会在`arr`数组中插入`target`,同时保持原有元素的升序。当你运行这个程序,会看到原始数组及插入后的结果。
阅读全文