实现二分查找(指针和数组)

来源:互联网 发布:windows phone8评测 编辑:程序博客网 时间:2024/06/05 18:27

指针实现

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.

原创粉丝点击