c中的二进制搜索问题



如果我在x中输入了第四个索引元素,它会正确运行,如果我在数组中输入了其他元素,它将返回-1

#include<stdio.h>
int Binary_search(int A[],int n,int x)
{
int start=0,end = n-1;
while(start<=end)
{
int mid = (start+end)/2;
if(x == A[mid])return mid;
else if(x < A[mid]) end = mid-1; 
else start = mid+1;
}
return -1;
}
int main()
{
int A[] = {3,23,26,51,72,77,42,64};
puts("Enter the element ");
int x; scanf("%d",&x);
int len = sizeof(A)/sizeof(A[0]);
int index = Binary_search(A,len,x);
if(index != -1) printf("Number %i is at index %i",x,index);
else printf("It's not in the array");
}

对于初学者,您需要一个按升序排序的数组。

此阵列

int A[] = {3,23,26,51,72,77,42,64};

不是完全按升序排序。相反,您可以使用例如以下阵列

int A[] = { 3, 23, 26, 42, 51, 64, 72, 77 };

还有这个如果语句

else if(x < A[mid]) end = mid-1;

不正确。你需要写

else if(x < A[mid]) end = mid;

而不是

int mid = (start+end)/2;

写会更安全

int mid = start + ( end - start ) / 2;

这允许避免表达式CCD_ 1的溢出。

最新更新