编写一个c语言代码有一个已经排好序的整型数组{1, 4, 6,9, 11,25, 31,46, 83, 100}。现输入一个数,要求排序将它插入数组中,并按照顺序输出新数组(注意数组输出时每个数间隔一个空格)
时间: 2024-11-29 16:35:44 浏览: 40
在C语言中,我们可以使用二分查找算法先找到合适的位置来插入新元素,然后利用数组切片的方式生成包含新元素的新数组。下面是相应的代码示例:
```c
#include <stdio.h>
// 二分查找的辅助函数
int binary_search(int array[], int size, int target) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (array[mid] == target)
return mid;
else if (array[mid] < target)
low = mid + 1;
else
high = mid - 1;
}
// 如果目标值大于数组中的所有元素,返回数组的末尾位置
return low;
}
// 插入元素并输出新数组
void insert_and_sort(int array[], int size, int new_element) {
int index = binary_search(array, size, new_element);
// 动态扩容,如果数组满了就创建新数组
int new_size = size + 1;
int* newArray = malloc(new_size * sizeof(int));
// 将原数组复制到新数组
for (int i = 0; i < index; ++i)
newArray[i] = array[i];
// 插入新元素
newArray[index] = new_element;
// 把剩余的元素复制到新数组
for (int i = index + 1; i < new_size; ++i)
newArray[i] = array[i - 1];
// 输出新数组
printf("Sorted array with the new element inserted is: ");
for (int i = 0; i < new_size; ++i)
printf("%d ", newArray[i]);
printf("\n");
// 释放内存
free(array);
array = newArray;
}
int main() {
int sorted_array[] = {1, 4, 6, 9, 11, 25, 31, 46, 83, 100};
int size = sizeof(sorted_array) / sizeof(sorted_array[0]);
int new_number = 50; // 示例输入
insert_and_sort(sorted_array, size, new_number);
return 0;
}
```
这段代码首先通过`binary_search`函数找到新元素应该插入的位置,然后动态分配新的数组,将原数组和新元素合并在一起,最后按顺序输出新数组。记得在程序结束时释放原始数组的内存。
阅读全文