c语言分治法实现二分查找源码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档