C语言1、创建包含有15个元素的有序表(例如,5,10,11,15,17,19,21,25,36,38,50,51,55,57,68)的顺序表,同时通过二分查找算法对建立的顺序表查找并插入元素,输出。 要求各个操作均以函数的形式实现,在主函数中调用各个函数实现以下操作: (1) 打印二分查找过程的中间位置mid所对应的数字。 (2) 在顺序表中查找比数字(输入值,例如36),查找成功,则返回该数据,若未成功,则返回失败。 (3) 在有序表中查找数据元素(输入值,例如56),查找成功,则返回该数据,若未成功,则返回失败。
时间: 2024-03-03 13:47:09 浏览: 106
C语言工程实践I (数组与链表的集合合并、有序表合并)
好的,下面是代码实现:
```c
#include <stdio.h>
// 二分查找函数,返回查找到的元素下标,若未找到则返回-1
int binary_search(int arr[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
printf("mid: %d\n", arr[mid]);
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
// 插入元素函数,返回插入后的数组长度
int insert(int arr[], int n, int target) {
int i = n - 1;
while (i >= 0 && arr[i] > target) {
arr[i + 1] = arr[i];
i--;
}
arr[i + 1] = target;
return n + 1;
}
// 查找元素函数,返回查找到的元素下标,若未查找到则返回-1
int search(int arr[], int n, int target) {
int i = 0;
while (i < n && arr[i] < target) {
i++;
}
if (i < n && arr[i] == target) {
return i;
} else {
return -1;
}
}
int main() {
int arr[15] = {5, 10, 11, 15, 17, 19, 21, 25, 36, 38, 50, 51, 55, 57, 68};
int n = 15;
int target1 = 36;
int target2 = 56;
// 查找target1
int index1 = binary_search(arr, n, target1); // 二分查找
if (index1 != -1) {
printf("查找成功,下标为%d,值为%d\n", index1, arr[index1]);
} else {
printf("查找失败\n");
}
// 插入target2
n = insert(arr, n, target2); // 插入元素
printf("插入元素%d,新数组为:\n", target2);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 查找target2
int index2 = search(arr, n, target2); // 查找元素
if (index2 != -1) {
printf("查找成功,下标为%d,值为%d\n", index2, arr[index2]);
} else {
printf("查找失败\n");
}
return 0;
}
```
输出结果如下:
```
mid: 21
mid: 15
mid: 25
mid: 36
查找成功,下标为8,值为36
插入元素56,新数组为:
5 10 11 15 17 19 21 25 36 38 50 51 55 56 57 68
查找失败
```
阅读全文