折半查找(二分查找)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
折半查找(⼆分查找)
折半查找(⼆分查找)
(1)定义以及思想(有序)
折半查找法是效率较⾼的⼀种查找⽅法。
假设已经按照从⼩到⼤的顺序排列好的五个整数a0-a4,要查找的数是X,其基本思想是:设查找数据的范围下限为l=1,上限为l=5,求中点m=(1+h)/2,⽤x与中点元素am⽐较,若x=am,即找到,停⽌查找;否则,若x>am,替换下限l=m+1,到下半段继续查找;若x<am,即换上限h=m-1,到上半段继续查找,如此重复前⾯的过程直到找到或者l>h为⽌。
如果l>h,说明没有此数,打印找不到信息,程序结束
(2)算法的实现
//⼆分查找必须是有顺序的
#include<stdio.h>
int BinSearch(int *a,int n,int x);
int main(void){
int num,result;
int arr[] = {1,2,3,4,5,6,7,8,9,10};
printf("请输⼊你要查找的数据:");
scanf("%d",&num);
result=BinSearch(arr,10,num);
if(result==-1)
printf("没找到这个数据\n");
else
printf("在下标为%d的位置找到这个数num=%d\n",result,num);
return 0;
}
int BinSearch(int *a,int n,int x)
{
int low,high,mid;
low=0;
high = n-1;
while(low<=high){
//其中mid = (low+high)/2这个的位置。
因为在外部函数中并不能确定是否low⼀定⼩于high的
mid = (low+high)/2;
if(x>a[mid])
low = mid+1;
else if(x<a[mid])
high = mid -1;
else
return mid;
}
return -1; }。