二分查找要求数组是有序的数组,如果数组不是有序得先排序
#include <stdio.h>
#define MAX 1000
void Input(int a[],int n);
int BinarySearch(int a[],int key,int n);
int i;
int main()
{
int N;
int A[MAX];
while(scanf("%d",&N)!=EOF)
{
Input(A,N);
int Key,b;
printf("输入要查找的数:");
scanf("%d",&Key);
b=BinarySearch(A,Key,N);
if(b!=-1)
{
printf("关键字在数组中为 A[%d]\n",b);
}
else
{
printf("数组中无此数\n");
}
}
return 0;
}
void Input(int a[],int n)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
}
int BinarySearch(int a[],int key,int n)
{
int middle=0;
int low=0;
int hight=n;
while(low<=hight)
{
middle=(low+hight)/2;
if(a[middle]==key)
{
return middle;
}
else if(a[middle]>key)
{
hight=middle;
}
else
{
low=middle;
}
}
return -1;
}