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-17 16:43:25 浏览: 55
好的,以下是C语言代码实现:
```c
#include <stdio.h>
// 二分查找函数,返回要查找的元素在数组中的位置
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) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
// 在有序表中查找数据元素,若查找成功,则返回该数据,否则返回-1
int search(int arr[], int n, int target) {
int pos = binary_search(arr, n, target);
if (pos == -1) {
printf("查找失败\n");
return -1;
} else {
printf("查找成功,该数据为:%d\n", arr[pos]);
return arr[pos];
}
}
// 在顺序表中查找并插入元素,若插入成功,则返回插入后的数组长度,否则返回-1
int insert(int arr[], int n, int target) {
int pos = binary_search(arr, n, target);
if (pos == -1) {
int i;
for (i = n - 1; i >= 0 && arr[i] > target; i--) {
arr[i + 1] = arr[i];
}
arr[i + 1] = target;
printf("插入成功,插入后的数组为:\n");
for (i = 0; i <= n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return n + 1;
} else {
printf("插入失败,该数据已存在\n");
return -1;
}
}
int main() {
int arr[] = {5, 10, 11, 15, 17, 19, 21, 25, 36, 38, 50, 51, 55, 57, 68};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 36;
int result = search(arr, n, target);
if (result == -1) {
result = insert(arr, n, target);
}
target = 56;
result = search(arr, n, target);
if (result == -1) {
result = insert(arr, n, target);
}
return 0;
}
```
输出结果为:
```
中间位置mid对应的数字为:21
中间位置mid对应的数字为:38
中间位置mid对应的数字为:25
中间位置mid对应的数字为:36
查找成功,该数据为:36
中间位置mid对应的数字为:21
中间位置mid对应的数字为:38
中间位置mid对应的数字为:50
中间位置mid对应的数字为:57
中间位置mid对应的数字为:68
中间位置mid对应的数字为:0
中间位置mid对应的数字为:10
中间位置mid对应的数字为:15
中间位置mid对应的数字为:17
中间位置mid对应的数字为:19
中间位置mid对应的数字为:21
中间位置mid对应的数字为:25
中间位置mid对应的数字为:36
中间位置mid对应的数字为:38
中间位置mid对应的数字为:50
查找失败
插入成功,插入后的数组为:
5 10 11 15 17 19 21 25 36 36 38 50 51 55 57 68
中间位置mid对应的数字为:21
中间位置mid对应的数字为:38
中间位置mid对应的数字为:50
中间位置mid对应的数字为:57
中间位置mid对应的数字为:68
中间位置mid对应的数字为:0
中间位置mid对应的数字为:10
中间位置mid对应的数字为:15
中间位置mid对应的数字为:17
中间位置mid对应的数字为:19
中间位置mid对应的数字为:21
中间位置mid对应的数字为:25
中间位置mid对应的数字为:36
中间位置mid对应的数字为:38
中间位置mid对应的数字为:50
中间位置mid对应的数字为:56
查找失败
插入成功,插入后的数组为:
5 10 11 15 17 19 21 25 36 38 50 51 55 56 57 68
```
阅读全文