Binary Search in C

Binary search is a search algorithm to find the position of an element in a sorted array. It is called a binary search because in order to search the value, it divides the array into two parts. Binary Search in C

It is a search algorithm that can only be applied to a sorted array. If the elements of an array are not sorted, you need to sort them first using the sort algorithm.

We can implement binary search using two methods:

  1. Iterative Method
  2. Recursive Method

Binary Search Working

In binary search, we first find the middle element of the array by dividing it into two parts (lower half array and upper half array) and then compare it with our target element.

  • If the target element is equal to the middle element of the array, we return the element position plus one because elements stored in the array use indexing, which starts from 0.
  • If the target element is smaller than the middle element, then we again divide the lower half array into two parts and compare the middle element with the target element. We will continue to do this process until the middle element is found equal to the target element.
  • If the target element is larger than the middle element, then we again divide the upper half array into two parts and compare the middle element with the target element. We will continue to do this process until the middle element is found to be equal to the target element.

In programming, we can perform the repetitive action by using two tools, which are iteration and recursion. In iteration, we use loops such as for, while, and do-while; in recursion, we use the recursion function.

Binary Search Time & Space Complexities

Time Complexity

  • Best Case Complexity: O(1)
  • Average Case Complexity: O(log n)
  • Worst Case: O(log n)

Space Complexity

The space complexity of binary search is O(1).

  • It uses the divide-and-conquer technique.
  • It is faster than a linear search.
  • Already present in many libraries.
  • Easy to implement.
  • Binary search does not adapt well to dynamic datasets where the elements frequently change.
  • It can be tricky for beginners.
  • If elements are added or removed frequently, the entire dataset needs to be re-sorted.
  • Java, .Net, C++, and STL libraries.
  • In debugging , binary search points out the position where the error occurs.

Binary Search in C

Here, we have provided a binary search program in C using iterators and recursion:

In iterative binary search, we will use a while loop:

#include <stdio.h>
#include<conio.h>
int main()
{
   int i, f, l, mid, num, tar, arr[100];
   clrscr();
   printf("How many numbers you want to enter in the array: ");
   scanf("%d",&num);
   printf("Please Enter Elements in Ascending order\n");
   for (i = 0; i < num; i++)
      scanf("%d",&arr[i]);
   printf("Enter the number which position you want to know: ");
   scanf("%d", &tar);
   f = 0;
   l = num - 1;
   mid = (f+l)/2;
   while (f <= l) {
      if (arr[mid] < tar)
                 f = mid + 1;
      else if (arr[mid] == tar) {
                 printf("%d is at %d position\n", tar, mid+1);
          break;
      }
      else
             l = mid - 1;
      mid = (f + l)/2;
   }
   if (f> l)
      printf("This element is not in the Array");
getch();
}

Output:

How many numbers you want to enter in the array: 6
Please Enter Elements in Ascending order

12
23
34
45
56
67

Enter the number which position you want to know: 23

23 is at 2 position

In recursive binary search, we will use the recursion of function:

#include <stdio.h>
#include<conio.h>
int BinarySearch(int arr[], int l, int r, int tar)
{
    int mid;
    if (r >= l) {
                mid = l + (r - l) / 2;
                if (arr[mid] == tar)
                    return mid;
    if (arr[mid] > tar)
                return BinarySearch(arr, l, mid - 1, tar)
    return BinarySearch(arr, mid + 1, r, tar);
    }
    return -1;
}
void main()
{
    int arr[100],i,res,num,tar;
    clrscr();
    printf("How many Elements you wan to enter in the array: ");
    scanf("%d",&num);
    printf("Enter Elements in the Ascending order\n");
    for(i=0;i<num;i++)
         scanf("%d",&arr[i]);
   printf("Enter the element which position you want to know: ");
   scanf("%d",&tar);
   res = BinarySearch(arr, 0, num - 1, tar);
   if(res == -1)
       printf("The element is not present in array");
   else
       printf("%d is at %d position", tar,res+1);
getch();
}

Output:

How many Elements you want to enter in the array: 5
Enter Elements in Ascending order

12
224
35
46
68

Enter the element which position you want to know: 46

46 is at 4 position

Conclusion

In conclusion, the binary search algorithm dramatically reduces the number of comparisons required, which makes it exceptionally fast, even with vast amounts of data.

Here in this tutorial, we mentioned the basics of the binary search algorithm, its advantages and disadvantages, and the code for binary search in C.

Try out these codes, and we hope the information in this tutorial answers your queries regarding the topic.

Good luck!

People are also reading: