实现二分查找(指针和数组)
指针实现:
int research(int *a, int key, int length)
{
assert(a);
int *p = a;
int *b = p + length - 1;
while (b >= p)
{
int c = (b - p) / 2;
if (*(p + c) == key)
return key;
else if (*(p + c) < key)
p = p+c+1;
else
b = b-c-1;
}
return -1;
}
数组实现:
int research(int a[],int key,int length)
{
int low = 0;
int high = length - 1;
int mid = 0;
while (high > low)
{
int mid = ((high+low)>>1);
if (a[high] == key || a[low] == key||a[mid]==key)
return key;
else if (key < a[mid])
high = mid;
else
low = mid;
}
return -1;
}
结果实现:
总结:
注意边界值的确定,注意传参的时候,要连数组的长度length一起传过来,否则在本题中,函数内部求的length将会是1,可以调试看一下,主要是因为数组传过来之后退化为指针,在除以a[0],即除以数组首元素的大小,由于是int也是四个字节,故求出的length将会是1.