有一个已经排好序的整形数组,先输入一个数,要求按取将它插入数组中,并依序输出新数字
时间: 2024-11-13 17:19:53 浏览: 26
如果你有一个已经排好序的整型数组,并想要插入一个新的数值,使其保持原有的升序排列,你可以采用二分查找法找到合适的位置,然后将新值插入。以下是C语言的一个示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 二分查找
int binarySearch(int arr[], int left, int right, int x) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == x)
return mid;
else if (arr[mid] < x)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
// 插入函数
void insertInOrder(int arr[], int n, int key) {
int index = binarySearch(arr, 0, n - 1, key);
if (index != -1) {
memmove(&arr[index + 1], &arr[index], (n - index) * sizeof(int));
arr[index] = key;
} else {
// 如果数组已满,直接添加到末尾
arr[n] = key;
n++;
}
}
// 输出数组
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int num;
printf("Enter a number to insert: ");
scanf("%d", &num);
insertInOrder(arr, n, num);
printArray(arr, n); // 输出新的排序数组
return 0;
}
```
在这个程序中,`insertInOrder` 函数首先找到目标位置,然后利用`memmove`函数调整数组元素,保持数组的有序性。如果找不到合适的位置,则在数组末尾添加新数。
阅读全文