二分查找
(二分查找的前提是该数组是有序)
思路分析:比如我们要找一个数temp;
1.先找到中间的数midval,用midval和temp比较
2.如果midval>temp,说明应该在midval的左边查找
3.如果midval<temp,说明应该在midval的右边查找
4.如果mindval==temp,说明找到
(!如果左边下标大于右边下标标志没有查找到!)
代码如下:
#include<stdio.h>
int find(int a[],int leftindex,int rightindex,int temp);
int main()
{
int a[5]={1,58,65,69,78};
int aLen=sizeof(a)/sizeof(int);
int num,index;
printf("请输入待查找的数:");
scanf("%d",&num);
index=find(a,0,aLen,num);
printf("%d的下标为%d",num,index);
return 0;
}
int find(int a[],int leftindex,int rightindex,int temp)
{
if(leftindex>rightindex)//该数不在此数组中
{
return -1;
}
int midindex=(leftindex+rightindex)/2;
//midindex中间下标
int midval=a[midindex];//midval中间值
if(midval>temp)
{find(a,leftindex,midindex-1,temp);
//由于midval大于temp,要向midval左边查找,既midindex-1,左边不变
}
else if(midval<temp){
find(a,midindex+1,rightindex,temp);
//由于midval小于temp,要向midval右边查找,既midindex+1,右边不变
}
else{
return midindex;
}
}
希望对你有所帮助(ノ)`ω´(ヾ)