满意答案
yingdie0053
2014.02.03
采纳率:44% 等级:12
已帮助:6620人
#include "stdio.h"
int cishu=0;
int compare(int x,int y)
{
cishu++;
if(x
else if(x==y) return 0;
else return 1;
}
int binary(int a[],int left,int right,int search)
{ int middle;
while(left<=right)
{ middle=(left+right)/2;
switch(compare(search,a[middle]))
{ case -1:right=middle-1; break;
case 0: return middle;
case 1:left=middle+1; }
}
return -1;
}
int main()
{ int a[12]={0,1,2,3,4,5,6,7,8,9,10,11};
int left,right,search,n,i;
printf("the data is :\n");
for(i=0;i<12;i++)
printf("%d ",a[i]);
printf("\nenter you want look number:\n");
scanf("%d",&search);
left=0; right=11;
n=binary(a,left,right,search);
if(n!=-1) printf("the location is %d\n",n);
else printf("the number is not found.\n");
printf("关键字比较的次数:%d\n",cishu);
}
如上,在一楼基础上加个全局变量cishu,表示关键字比较的次数。
例如:
0,1,2,3,4,5,6,7,8,9,10,11
你要查找6.
初始left=0,right=11.
这时候关键字比较是
6和a[5],5=(0+11)/2;
也就是6和5比较
6比5大,所以left=5;
然后在关键字比较
6和a[8],8=(5+11)/2;
也就是6和7比较。
6比7小。
所以right=7;
然后在关键字比较
6和a[6],6=(5+70/2;
这时候a和a[6]相等,找到。
所以就进行了3次关键字比较。
00分享举报