c - 二进制搜索指针动态内存分配递归

标签 c pointers recursion binary-search dynamic-memory-allocation

我正在使用指针和动态内存分配实现二进制搜索。我首先对元素列表进行排序,然后执行搜索。排序部分工作正常,但我的搜索工作不正常。我知道算法是正确的,但我不知道如何处理语法。有人可以帮我吗?? PS 这是我关于堆栈溢出的第一个问题,顺便说一句。 :)

#include <stdio.h>
#include <stdlib.h>

int binary_search(int x,int start,int end, int *array)
{
   int q;
   q=(start+end)/2;
   if(x==*(array+q))
   {
      return q;
   }
   else if (x>*(array+q))
   {
      binary_search(x,q+1,end,array);
   }

   else if (x<*(array+q))
   {
      binary_search(x,start,q-1,array);
   }

   else if(start>=end)
      return -1;
}

int main()
{
   int n,*a,tmp,i,j,search,pos;
   printf("Enter n");
   scanf("%d",&n);
   a=malloc(sizeof(int)*n);

   for(i=0;i<n;i++)
   {
      scanf("%d",&tmp);
      *(a+i)=tmp;
   }

   for(i=0;i<n-1;i++)
   {
      for(j=0;j<n-1;j++)
      {
         if(*(a+j)>*(a+j+1))
         {
            tmp=*(a+j);
            *(a+j)=*(a+j+1);
            *(a+j+1)=tmp;
         }
      }
   }

   printf("Sorted elements are\n");
   for(i=0;i<n;i++)
   {
      printf(" %d",*(a+i));
   }

   printf("Enter element to search\n");
   scanf("%d",&search);
   pos=binary_search(search,0,n-1,&a);
   printf("\nThe element is located at position %d",pos);

   return 0;
}

最佳答案

除上述答案外-

int binary_search(int x,int start,int end, int *array)
                                                ^integer pointer

但是在 main 中你传递给它一个 int ** 类型-

pos=binary_search(search,0,n-1,&a);
                               ^a is already an integer pointer

编译器会发出警告。 只需在其中传递 a 即可。而且您还忘记了 free a,因为您已经使用 malloc 为其分配了内存。

关于c - 二进制搜索指针动态内存分配递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31488215/

相关文章:

c++ - C++派生类构造函数后调用基类构造函数

c++ - 递归函数问题和查找所有可能的路径

C编译器警告: assignment from incompatible pointer type

arrays - 在 Parse 中从指针数组中检索对象,然后在 Swift 中更新 uitableview 的更有效方法

recursion - Clojure:简单阶乘导致堆栈溢出

Java 字符递归

c - 确定两个整数之间的字典距离

c - 链接器找不到现有的静态库文件

c - 为什么 auto a=1;用C编译?

c - 最终答案为零的方程组