#include <stdio.h>
int main()
{
int search(int *p,int len,int x); //函数的声明
int a[] = {1,2,3,5,7,8,9}; //二分查找是针对排好序的数组而言的。
int *p = a; //指针指向数组a的首地址
int len = sizeof(a)/sizeof(int);//求出数组的长度
int x ;
printf("请输入你要查找的数:");
scanf("%d",&x);
int t = search(p, len, x);
if(t==-1)
printf("你要查找的数%d不在数组中!!!",x);
else
printf("你查找的数%d在数组中的下标为:%d",x,t);
printf("\n");
}
int search(int *p,int len,int x){ //该函数用于二分查找算法
int temp,low=0,high=len-1; //low和high表示在这两个变量的范围内进行查找我们我要查找的数,也是在这两个数之间进行二分法
while(low<=high){
temp = (low+high)/2; //查找low和high之间中间的下标。这也是二分查找的精髓
if(p[temp]==x)
return temp; //如果查找到了,就返回这个数在数组中的下标。
else if(x<p[temp])
high = temp-1; //如果查找的数比二分查找得到中间的数还要小,那么就将high的指向指向一半前面的那一个数,在继续进行二分查找。
else if(x>p[temp])
low = temp+1; //如果查找的数比二分查找得到中间的数还要大,那么就将high的指向指向一半后面的那一个数,在继续进行二分查找。
}
return -1; //上面循环查找我们要得到的值,如果没有查找到,循环就会跳出,这个时候就返回-1,表示没有查到我们要得到的值。
}
07-25
2185