----------------------------------------------------------------------------------------
简单二分查找
----------------------------------------------------------------------------------------
面对二分查找,主要是你的思路;
第一步:你得把数组有序的排列,一般选择从小到大。
第二步:把 L,R,M确定下来。然后看看你得key
如果,key ==M,你运气太好一下子就找到了;
如果,key<M,此时你考虑在你的左边找。(从小到大排列为例)
如果,key>M,此时你考虑在你的右边找。(从小到大排列为例)
第三步:循环着,就看你的结束条件了,当然了,L不能去了R的右边吧!则(L< R)
int main ()
{
int s[]={1,3,4,5,6,8,9,11,34};
int key =4; //需要找的关键字
int index = -1;//找到返回下标,负责返回-1,没找到
int len = sizeof(s)/sizeof(s[0]);//测量数组长度;区别strlen
int l= 0; //左结点
int r =len - 1;//右结点
int m = (l+r)/2;//中间值
int i = 0;
while(l <= r)
{
if(s[i]==key)
{
index = m;
}
else if(s[i] < key)
{
l = m + 1;
m = (l+r)/2;
index = m;
}
else
{
r = m - 1;
m = (l+r)/2;
index = m;
}
i ++;
}
printf("%d\n",index);
return 0;
}
把简单问题消化掉!