c语言分治法实现二分查找源码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分治法实现二分查找
#include
#include
#include
#include
int main()
{ int shunxuchazhao(int n,int a[20]);
int erfen(int n,int left,int right,int a[20]);
float t1, t2;
int n,i,a[20]={5,17,29,36,45,65,75,87,91,95,107,137,148,15 8,168,178,353,423,546,641};
char b;
for(i=0;i<20;i++)
printf("%d ",a[i]);
printf("\n请输入您要查询的方式(0为顺序查找,1为二分查找,其他输入错误):");
b=getchar();
printf("请输入您要查找的数:");
scanf("%d",&n);
if(b=='0')
{ t1 = clock();
shunxuchazhao(n,a);
t2 = clock();
printf("\n顺序查找%d的时间为:%lf",n,t2-t1);
}
else if(b=='1')
{ t1 = clock();
erfen(n,0,19,a);
t2 = clock();
printf("\n二分查找%d的时间为:%lf",n,t2-t1);
}
else
printf("对不起,您选择的查找方法错误"); }
int shunxuchazhao(int n,int a
[])
{
int i;
for (i=0;i<20;i++)
{
if(n==a[i])
{printf("%d在数组的第%d位",n,i);
return 0;
}
}
if(i>20) printf("对不起,您查找的数在数组中不存在"); }
int erfen(int n,int left,int right,int a[]) {
while(left<=right){
int middle=(left+right)/2;
if(n==a[middle]){
printf("%d在数组的第%d位",n,middle);
return 0;}
if(n>a[middle]) left=middle+1;
else right=middle-1;
}
printf("对不起,您查找的数在数组中不存在");
return 0;
}