1.二分法查询原理
例子:在 1 ,-1,55,32,-8中找到32
(1).确定中间值与左右边界的值(下标)
(2).查找的数与中间比较,如果中间值大于要查找的数则往左边查询,反之右边)
(3).判断没有查找到的情况:如果扫描到左边界的元素个数大于右边边界的元素个数,则表示没有找到
2.代码实现
#include <stdio.h>
int dichotomySearch(int arr[],int liftIndex,int rightIndex,int num){
int midval=(rightIndex+liftIndex)/2;//计算中间值的下标
if(liftIndex > rightIndex){//判断是否越界,越界则查询不到
return -1;
}
if(arr[midval] > num){//左半边查询
dichotomySearch(arr,liftIndex,midval-1,num);
return 1;
}
else if(arr[midval] < num){//右半边查询
dichotomySearch(arr,midval+1,rightIndex,num);
return 1;
}
else{//查询的值等于中间下标的值
return 1;
}
}
int main(){
int arr[]={11,34,89,77,99,-10,100};
int len=sizeof(arr)/sizeof(int);//计算数组个数
int liftIndex=len-1;//有边界个数
int findVal=dichotomySearch(arr,0,liftIndex,-100);//二分法查询函数
if(findVal==1){//判断是否查询到数值
printf("fingding!\n");
}
else{
printf("no find\n");
}
return 0;
}
3.运行结果
查询-100:
查询77: