递归二进制搜索/C

递归二进制搜索/C,c,recursion,binary-search,C,Recursion,Binary Search,我整天都在用C编写一个使用递归(对我来说是一个新概念)的二进制搜索。我做了很多研究,得出了以下结论: int binary_search(int *parr, int value, int left, int right){ int middle = (left+right)/2; if(*(parr+middle)==value){ return 1; } if(right<left){ return 0; }

我整天都在用C编写一个使用递归(对我来说是一个新概念)的二进制搜索。我做了很多研究,得出了以下结论:

int binary_search(int *parr, int value, int left, int right){
    int middle = (left+right)/2;
    if(*(parr+middle)==value){
        return 1;
    }
    if(right<left){
        return 0;
    }
    if(*(parr+middle)>value){
        return binary_search(*parr, value, left, middle-1);
    }
    else{
        return binary_search(*parr, value, middle+1, right);
    }
}
int二进制搜索(int*parr,int值,int左,int右){
中间整数=(左+右)/2;
如果(*(帕尔+中间)=值){
返回1;
}
if(rightvalue){
返回二进制搜索(*parr,value,left,middle-1);
}
否则{
返回二进制搜索(*parr,value,middle+1,right);
}
}
这是我的主要职责:

int main()
{
    int arr[maxbr],n, i, g;
    do{
        printf("\n n=");
        scanf("%d", &n);
    } while(n>maxbr);

    for(i=0; i<n; i++){
        printf("\n a[%d]", i);
        scanf("%d", &arr[i]);
    }

    g = binary_search(arr, 5, 0, n-1);
    printf(" %d", g);
}
intmain()
{
int-arr[maxbr],n,i,g;
做{
printf(“\n=”);
scanf(“%d”和“&n”);
}而(n>maxbr);
对于(i=0;i您可能需要:

 return binary_search(parr, value, left, middle-1);
如果parr前面没有*。*parr是第一个int,parr是数组


(也修另一个)

如果你想试试这个

我实现了一个没有任何指针的递归二进制搜索,并确保检查二进制搜索所需的所有条件

关注我是如何计算中间元素位置的。

二进制搜索中的一个非常重要的条件是数组应该被排序,并且总是左索引=1){ int arr[n],i,j; int temp=0,swapFlag=0; printf(“\n插入%d个元素:\n”,n);
对于(i=0;i什么是
maxbr
?您是否尝试过使用调试器来捕获崩溃并查看其发生位置?请阅读警告并对其采取行动。如果他们说您做错了,您很可能会这样做。我使用#define maxbr 100(例如)定义数组可以拥有的最大元素数。如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两个作用。它让每个人都知道您的问题已经解决到令您满意的程度,并让帮助您的人相信您的帮助。请给出完整的解释。谢谢,陌生人!这解决了问题。祝您度过愉快的一天/一夜!
#include <stdio.h>

int binarySearch(int arr[],int x,int l,int m,int r){
    while (l<=r){
        if(arr[m] == x){
            return m+1;
        }
        else if(arr[m] > x){
            return binarySearch(arr,x,l,(l+(m-1))/2,m-1);
        }
        else if(arr[m] < x){
            return binarySearch(arr,x,m+1,((m+1)+r)/2,r);
        }
    }
    return -1;
}

int main(){
    int n,m,x;
    printf("Enter number of array elements: ");
    scanf("%d",&n);
    int l=0,r=n-1;

    if(r>=1){
        int arr[n],i,j;
        int temp=0,swapFlag=0;
        printf("\nInsert %d elements:\n",n);
        for(i=0;i<n;i++){
            scanf("%d",&arr[i]);
        }
        printf("Insert complete.\n");

        printf("\nYour array looks like:\n");
        for(i=0;i<n;i++){
            printf("%d ",arr[i]);
        }

        //Remember binary search only works for sorted arrays.

        //Applying bubble sort to the array
        for(i=0;i<n-1;i++){
            swapFlag = 0;
            for(j=0;j<n-i-1;j++){
                if(arr[j]>arr[j+1]){
                    swapFlag = 1;
                    //Swapping unordered pairs
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            //Condition to reduce number of passes & comparisons
            if(swapFlag == 0){
                break;
            }
        }

        printf("\n\nAfter sorting the array looks like:\n");
        for(i=0;i<n;i++){
            printf("%d ",arr[i]);
        }

        printf("\n\nEnter an element that you want to find: ");
        scanf("%d",&x);

        m = (l+r)/2;
        int result = binarySearch(arr,x,l,m,r);

        if(result != -1){
            printf("\nYes! Element %d is found at position %d.",x,result);
        }
        else{
            printf("\nOops! Element %d is not found.",x);
        }
    }
    else{
        printf("Binary search is not required as array has only 1 element.");
    }
    return 0;
}