用c语言从键盘输入一个整数然后在一个模型一维数组a【20】中,用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则打印“No found”
#include <stdio.h>
int binarySearch(int arr[], int low, int high, int target) {
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) {
return mid + 1; //返回该数所在下标+1作为第几个元素的值
} else if (arr[mid] > target) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1; //未找到返回-1
}
int main() {
int a[20] = {5, 9, 13, 17, 23, 40, 51, 57, 60, 64};
int len = sizeof(a) / sizeof(a[0]);
printf("Please input an integer: ");
int target;
scanf("%d", &target);
int index = binarySearch(a, 0, len - 1, target);
if (index == -1) {
printf("No found");
} else {
printf("The number is the %dth element in the array and its value is %d\n", index, target);
}
return 0;
}
折半查找,必须该数组是 有序的,
举个如下例子:
#include <stdio.h>
int serach(int a[], int len, int n)
{
int low=0, high= len-1;
while(low<=high)
{
int mid=(low+high)/2;
if(n==a[mid])
return mid;
else if(n < a[mid])
high=mid-1;
else
low=mid+1;
}
return -1;
}
int main(void)
{
int a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}, n;
printf("请输入您要查找的数: ");
scanf("%d",&n);
int len = sizeof(a) / sizeof(a[0]);
int result = serach(a, len, n);
if (result!=-1)
printf("%d是数组a中的第%d个元素",n, result + 1);
else
printf("Not Found");
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: