C中的递归二进制搜索程序

时间:2012-04-23 02:54:57

标签: c binary-search

我正在尝试在C中创建一个递归二进制搜索函数。我想我已经拥有它了,但是当我尝试编译时,我会在两次递归调用中得到错误“期望的primary-expression before']'token'。有谁知道为什么会这样?

我的功能:

int binSearch(int val, int a[], int size)
{
         int mid;
         mid=(size)/2;
         if(val==a[mid]) return a[mid];
         else if(val<a[mid]) {
              return binSearch(val, a[], (size-mid));
         }
         else if(val>a[mid]) {
              return binSearch(val, a[], size);
         }
         else return(-1);
 }

如果[]是排序数组,则size是数组的大小,val是要搜索的值。

3 个答案:

答案 0 :(得分:3)

您需要传递a,而不是a[]。像这样:

 return binSearch(val, a, size);

答案 1 :(得分:1)

*

#include<stdio.h>
main()
{
    int arr[20],start,end,middle,n,i,item;
    printf("How many elements you want to enter in the array : ");
    scanf("%d",&n);
    for(i=0; i < n; i++)
    {
      printf("Enter element %d : ",i+1);
      scanf("%d",&arr[i]);
    }
    printf("Enter the element to be searched : ");
    scanf("%d",&item);
    start=0;
    end=n-1;
    middle=(start+end)/2;
    while(item != arr[middle] && start <= end)
    {
      if(item > arr[middle])
        start=middle+1;
      else
        end=middle-1;
      middle=(start+end)/2;
    }
    if(item==arr[middle])
      printf("%d found at position %d\n",item,middle+1);
    if(start>end)
      printf("%d not found in array\n",item);
}

*

答案 2 :(得分:0)

您的代码存在严重错误。编写此类算法时,您应该花一些时间列出测试用例。为了全面测试,我会编写一些循环来检查以下所有组合:

  • 检查它是否适用于0,1,2,3,4个输入元素(元素值间隔开以便您可以搜索现有元素之间的值),寻找小于/等于/大于每个元素的元素元素

以下是测试工具的一些示例代码,只是为了让您入门......

int inputs[] = { 10, 20, 30, 40 };

for (int size = 0; size < 4; ++size)
    for (int i = 0; i <= size; ++i)
    {
        assert(binSearch(inputs[i], inputs, size) == (i == 0 ? -1 : i));
        assert(binSearch(inputs[i] - 5, inputs, size) == -1);
        assert(binSearch(inputs[i] + 5, inputs, size) == -1);
    }

即使你在头脑中完成了几个这样的案例,你也可能会发现这个错误。