C语言中二分查找出现了问题
#include<stdio.h> #define N 12
#define NOTFOUND -1
int binary_search(int a[],int x , int n); // 函数声明
int order_check(int a[],int n); //函数声明
void main()//函数声明
{
int i,x,k,end=0,a[N];
while(1)
{
while(1)
{
printf("\n 请由小到大输入N=12个整数:\n");
for(i=0;i<N;i++)scanf("%d",&a[i]);
printf("请核对你输入的数据:\n");
for(i=0;i<N;i++)printf("%5d",a[i]);
if(order_check(a,N))break;//检查输入数据是否有序
}
while(1)
{
printf("\n请输入要查找的元素:x=");
scanf("%d",&x);
k=binary_search(a,x,N);
if(k=NOTFOUND)printf("\n没找到%d NOTFOUND \n",x);
else printf("\n找到a[%d]=%d\n",k,x);
printf("\n是否打算在查另一个数据? \n请选择操作码,0:结束: 1:继续查找:\n");
scanf("%d",&i);
if(!i){end=1;break;}//置结束記end
}
if(end)break;
}
printf("程序结束,再见!\n");
}
//检查输入数据是否有序函数
int order_check(int a[],int n)
{
int i;
for(i=0;i<n-1;i++)if(a[i]>a[i+1])
{
printf("\n你输入的数据不是有序的,其中:\n");
printf("a[%d]=%d大于a[%d]=%d\n 要重新输入数据。\n",i,a[i],i+1,a[i+1]);
return 0;
}
printf("\n你输入的数据是有序的,请继续下一步。 \n");
return 1;
}
//二分查找函数
int binary_search(int a[],int x,int n)
{
int left,right,mid;
left=0;right=n-1;
while(left<=right)
{
mid=(left+right)/2;
if(x=a[mid]) { return(mid);break;}
else if(x<a[mid])right=mid-1;
else left=mid+1;
}
return(NOTFOUND);//没找到X,返回无效下标
}
在进行二分查找是怎么寻找不出所要找的数呢?