// 二分法查找算法
成都创新互联公司服务项目包括广德网站建设、广德网站制作、广德网页制作以及广德网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,广德网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到广德省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
int binary_search(int arr[],int *top,int *bot,int x){
if (*bot = *top){
int index= *top + (*bot - *top) / 2;
int *mid = index;
if (arr[*mid] == x) return *mid;
if (arr[*mid] x) { // x在左侧
*mid = *mid - 1;
return binary_search(arr, top, mid, x);
}
else{ // x在右侧
*mid = *mid+1;
return binary_search(arr, mid, bot, x);
}
}
return -1;
}
void main()
{
int a[10] = { 1, 3, 5, 7, 8, 9, 12, 13, 15, 17 };
int n = sizeof(a) / sizeof(a[0]), x = 13, t = 0;
int *top = t, *bot = n;
*bot = *bot - 1;
int index = binary_search(a, top, bot, x);
if (index = 0){
printf("%d在数组索引为[%d]的位置\n", x, index);
}
else{
printf("%d在数组中不存在!\n", x);
}
}
对于函数:int* find(int a[], int value),其中a为整型数组首地址,value是被检验值。我们可以利用指针a间接引用数组第一个元素的值,并将其与value比较,比较完后,将指针向后移动,再通过间接引用的方式比较下一个元素值,依次下去,直到在整型数组中找到被检验值或者整型数组所有元素比较结束为止。
那么这里有个问题,我们如何通过指针知到整型数组什么时候结束呢?对于整型数组而言,没有办法,所以我们必须先知道整型数组的长度,可以在参数中给出,也可以在主函数定义中知晓。
程序如下:
int* find(int a[], int value)
{
int i=0,*p=a;
for(i=0;i=9;i++)
{
if(*p==value)
return p;
else
p++;
}
if(i=10)
return 0;
}
main()
{
int c[10]={1,2,3,4,5,6,7,8,9,0};
int n;
scanf("%d",n);
printf("%x %d",find(c,n),*(find(c,n)));/*第一个为函数返回地址,第二个为函数返回地址里的值*/
getch();
}
另外,我们测试一个程序或者函数是否正确不在于其能否正确运行,而在于其运行的结果是否符合我们的预期。针对上述程序,测试方法如下:
输入任意一个数,如果这个数在数组C内,看是否能够打印出16进制的地址数和与输入值相同的数;如果不在数组C内,看是否返回值为0的地址。
#includestdio.h
#includestring.h
int Search(char *s1,char *s2)
{
int i,k;
i=0;
if(strlen(s1)strlen(s2))
{
return -1;
}
k=0;
while(strlen(s1)=strlen(s2))
{
if(*(s2+i)==*(s1+k+i))
{
i++;
}
else
{
i=0;
k++;
}
if(*(s2+i)=='/0')
return k;
else if(*(s1+k+i)=='/0')
return -1;
}
}
main()
{
char s1[100],s2[100];
int m;
printf("请输入字符串1:");
gets(s1);
printf("请输入字符串2:");
gets(s2);
m=Search(s1,s2);
if(m==-1)
printf("输出结果:\"%s\"不包含 \"%s\"\n",s1,s2);
else
printf("输出结果:\"%s\"包含\"%s\",位置在第%d个字符处 \n",s1,s2,m);
}
不用万分感谢,只要十分感谢即可。
对于函数:int* find(int a[], int value),其中a为整型数组首地址,value是被检验值。我们可以利用指针a间接引用数组第一个元素的值,并将其与value比较,比较完后,将指针向后移动,再通过间接引用的方式比较下一个元素值,依次下去,直到在整型数组中找到被检验值或者整型数组所有元素比较结束为止。
那么这里有个问题,我们如何通过指针知到整型数组什么时候结束呢?对于整型数组而言,没有办法,所以我们必须先知道整型数组的长度,可以在参数中给出,也可以在主函数定义中知晓。
程序如下:
int* find(int a[], int value)
{
int i=0,*p=a;
for(i=0;i=9;i++)
{
if(*p==value)
return p;
else
p++;
}
if(i=10)
return 0;
}
main()
{
int c[10]={1,2,3,4,5,6,7,8,9,0};
int n;
scanf("%d",n);
printf("%x %d",find(c,n),*(find(c,n)));/*第一个为函数返回地址,第二个为函数返回地址里的值*/
getch();
}
另外,我们测试一个程序或者函数是否正确不在于其能否正确运行,而在于其运行的结果是否符合我们的预期。针对上述程序,测试方法如下:
输入任意一个数,如果这个数在数组C内,看是否能够打印出16进制的地址数和与输入值相同的数;如果不在数组C内,看是否返回值为0的地址。