编程实现:利用折半查找算法实现在数据序列{2,3,6,33,45,66,88,100}分别查找关键字6和89的结果,找到输出位序,找不到输出相应提示信息。C语言实现
时间: 2023-09-09 13:05:22 浏览: 44
### 回答1:
以下是C语言实现折半查找算法的代码:
```c
#include <stdio.h>
int binarySearch(int arr[], int left, int right, int key) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {2, 3, 6, 33, 45, 66, 88, 100};
int n = sizeof(arr) / sizeof(arr[0]);
int key1 = 6, key2 = 89;
int index1 = binarySearch(arr, 0, n - 1, key1);
int index2 = binarySearch(arr, 0, n - 1, key2);
if (index1 != -1) {
printf("The index of %d is %d\n", key1, index1);
} else {
printf("%d not found in the array\n", key1);
}
if (index2 != -1) {
printf("The index of %d is %d\n", key2, index2);
} else {
printf("%d not found in the array\n", key2);
}
return 0;
}
```
输出结果为:
```
The index of 6 is 2
89 not found in the array
```
可以看到,程序成功找到了关键字6的位序,但未找到关键字89,并输出了相应提示信息。
### 回答2:
下面是一种用C语言实现的折半查找算法来查找关键字6和89在数据序列{2,3,6,33,45,66,88,100}中的结果:
```c
#include<stdio.h>
int binarySearch(int arr[], int low, int high, int key) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == key) {
return mid;
}
if (arr[mid] < key) {
low = mid + 1;
}
else {
high = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {2, 3, 6, 33, 45, 66, 88, 100};
int key1 = 6;
int key2 = 89;
int index1 = binarySearch(arr, 0, sizeof(arr) / sizeof(arr[0]) - 1, key1);
int index2 = binarySearch(arr, 0, sizeof(arr) / sizeof(arr[0]) - 1, key2);
if (index1 != -1) {
printf("关键字6的位置是%d\n", index1);
}
else {
printf("找不到关键字6\n");
}
if (index2 != -1) {
printf("关键字89的位置是%d\n", index2);
}
else {
printf("找不到关键字89\n");
}
return 0;
}
```
运行该程序,输出结果为:
关键字6的位置是2
找不到关键字89
根据输出结果可知,关键字6位于数据序列的第3个位置,而关键字89在数据序列中找不到。
### 回答3:
#include <stdio.h>
int binarySearch(int arr[], int size, int target) {
int left = 0, right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid + 1;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {2, 3, 6, 33, 45, 66, 88, 100};
int size = sizeof(arr) / sizeof(arr[0]);
int target1 = 6;
int result1 = binarySearch(arr, size, target1);
if (result1 != -1) {
printf("关键字6的位序为:%d\n", result1);
} else {
printf("未找到关键字6\n");
}
int target2 = 89;
int result2 = binarySearch(arr, size, target2);
if (result2 != -1) {
printf("关键字89的位序为:%d\n", result2);
} else {
printf("未找到关键字89\n");
}
return 0;
}
编程实现了折半查找算法在给定数据序列{2,3,6,33,45,66,88,100}中查找关键字6和89的结果。查找关键字6时,通过折半查找算法找到了该关键字在序列中的位置,即第3位;而查找关键字89时,在序列中没有找到该关键字,输出相应提示信息"未找到关键字89"。