二进制搜索(递归)以检查是否在排序数组中找到了某个值-修改

时间:2018-07-02 23:02:45

标签: algorithm binary-search

我研究了一种递归算法,该算法检查排序的给定数组中是否存在某个值(键),看起来像这样:

int bin_search_rec(int key, int *a, int n)
{
  if (n==0)
   return 0;
  if (key=a[n/2])
   return key;
  if (key<a[n/2])
   return bin_search_rec(key,a,n/2);
  else
   return bin_search_rec(key,a+n/2 +1,n-n/2 -1 );
}

我还研究了上面的算法可以修改-不仅可以检查数组中是否存在某个值,还可以返回该值的索引(如果存在的话):

int bin_search_rec(int key, int *a, int n)
{
  int pos;
  if (n==0)
   return -1;
  if (key=a[n/2])
   return key;
  if (key<a[n/2])
   return bin_search_rec(key,a,n/2);
  else
   pos= bin_search_rec(key,a+n/2 +1,n-n/2 -1 );
  if (pos==-1)
   return -1;
  else
   return pos+ n/2 +1;
}

我不明白为什么在此修改中我们需要使用变量pos才能找到键的索引。 用这种方式修改算法为什么会出错:

int bin_search_rec(int key, int *a, int n)
{
  if (n==0)
   return -1;
  if (key=a[n/2])
   return n/2;
  if (key<a[n/2])
   return bin_search_rec(key,a,n/2);
  else
   return bin_search_rec(key,a+n/2 +1,n-n/2 -1 );
}

0 个答案:

没有答案