#include <stdio.h>
#include <string.h>
int bisearch(char** arr,int b,int e,char* v)
{
int minIndex=b,maxIndex=e,midIndex;
while(minIndex<maxIndex-1)
{
midIndex = minIndex +(maxIndex-minIndex)/2;//防止数据溢出
if(strcmp(arr[midIndex],v)<=0)
{
minIndex = midIndex;
}else
{
maxIndex = midIndex;
}
}
if(!strcmp(arr[maxIndex],v))
{
return maxIndex;
}else if(!strcmp(arr[minIndex],v))
{
return minIndex;
}else
{
return -1;
}
}
int main()
{
int i,flag;
/*
在arr中查找是否存在value
p是用于传递二维数组的指针组数
arr第二维的大小为4,因为字符串最后有'\0'为结束符
value用字符指针指向一个字符串
*/
char* p[6];
char arr[][4] = {"abc","bcd","cde","efg","fgh","ghi"};
char* value="bcd";
//对每一个指针赋值,必须这样写、
p[0]=&arr[0][0];
for(i=1;i<6;i++)
{
p[i]=arr[i];
printf("p[%d]=%s\n",i,p[i]);//仅仅是为了测试用的
}
flag = bisearch(p,0,5,value);
if(flag==-1)
{
printf("没有找到!\n");
}else
{
printf("找到了,位置为%d\n",flag);
}
return 0;
}
关于二维数组传递的知识见
http://blog.csdn.net/zheng0518/article/details/8868981