0

The following code works good if the key is less than equal to 11 but if the key is greater than 11 it does not return anything.

#include<stdio.h>
#include<time.h>

int BinaryS(int a[],int l, int h,int key)
{
    
    if(h >= l){
    int mid = (h-l)/2;
    if(a[mid] == key)
        return mid;
    if(a[mid] > key)
        return BinaryS(a,l,mid-1,key);
    return BinaryS(a,mid+1,h,key);
    }
    return -1;
}
int main(void)
    {
        int a[]={10,11,15,19,22,23,30,40,45,50};
        int n;
        printf("Enter the number to be searched\n");
        scanf("%d",&n);
        int num=10;
        int clock_t,start_t,end_t,total;
        start_t = clock();
        int f = BinaryS(a,0,num-1,n);
        end_t = clock();
        total = (end_t-start_t)/CLOCKS_PER_SEC;
        printf("Time taken: %d\n",total);
        if(f == -1){
        printf("Key not found in the array ");
        }
        else{
            printf("Key found at: %d",f+1);
        }
    
    return 0;
}
    

The Output of the above code is as follows: enter image description here

1 Answer 1

3

int mid = (h-l)/2; is wrong for sure. mid should be (h + l)/2.

Sign up to request clarification or add additional context in comments.

1 Comment

I just found the error after posting the question. Thanks a lot by the way.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.