#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int Find(int a[],int n,int x,int *p);
int main()
{
int n,x,temp;//temp用来存储查找元素的下标
printf("请输入一维数组元素的个数:\n");
scanf("%d",&n);
int a[n];
printf("请以递增顺序输入%d个数组元素的值:\n",n);
for(int i =0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("请输入要查找的值:\n");
scanf("%d",&x);
if(Find(a,n,x,&temp) == 1)
printf("查找成功,该元素下标为:%d\n",temp);
else printf("查找失败\n");
return 0;
}
int Find(int a[],int n,int x,int *p)
{
int min,max;//设置查找区间
min = 0;
max = n-1;
for(int i=1;i<=(n+1)/2;i++)
{
if(x == a[(min+max)/2])//查找成功,返回1
{
*p = (min+max)/2;
return 1;
}
if(x > a[(min+max)/2])
{
min = (min+max)/2;
}
if(x < a[(min+max)/2])
{
max = (min+max)/2;
}
}
if(x == a[min]) //特殊情况:当所查找的值恰好在区间边界时
{
*p = min;
return 1;
}
if(x == a[max])
{
*p = max;
return 1;
}
return -1;//查找失败
}