1.基本概念:二分查找是一种常见的查找算法,是在已经排好顺序的数组中找到想要找到的数字或者字符
2.使用条件:已经排好顺序的数组
3.基本思路:
和游戏“数字炸弹”一样,通过不断二分缩小边界,快速找到需要的数字。
如图数组元素为11-19,我们需要找到数字13,并返回下标。因为数组是排好序的,所以我们选择中间元素15和目标数13比较,发现中间数字大于13,所以13一定是在中间元素15的左半边区间。
然后我们将右边界收缩到15,即15右边的数字舍弃,继续循环使用以上步骤,将中间元素13和目标数13比较,相等返回下标。
此题重点是边界收缩的思路。
4.代码实现
#include<stdio.h>
int main(){
int nums[]={11,12,13,14,15,16,17,18,19};
int find=13; //目标数字
int left=0; //左边界
int right=sizeof(nums)/4-1;
//右边界,先计算数组长度,然后除以4(一个int 4个字节),就是数组元素个数
int mid=0;
while(left<=right){
mid=(left+right)/2;
if(nums[mid]<find){
left=mid+1; //收缩左边界至中心:
}
else if(nums[mid]>find){
right=mid-1; //收缩右边界至中心
}
else if(nums[mid]==find){
printf("%d\n",mid);
return 0;
}
}
printf("未找到"); //如果未找到,打印未找到
return 0;
}
5.运行结果