//This code is written by Souvik Ghosh
//Iterative Binary Search
#include <stdio.h>
//Function for Ascending Binary Search
int ascendingBinarySearch(int *p, int size, int search)
{
int low = 0, high = size - 1, mid;
while (low <= high)
{
mid = (low + high) / 2;
if (search == p[mid])
{
return mid;
}
else if (search > p[mid])
{
low = mid + 1;
}
else if (search < p[mid])
{
high = mid - 1;
}
}
return -1;
}
//Function for Descending Binary Search
int descendingBinarySearch(int *p, int size, int search)
{
int low = 0, high = size - 1, mid;
while (low <= high)
{
mid = (low + high) / 2;
if (search == p[mid])
{
return mid;
}
else if (search > p[mid])
{
high = mid - 1;
}
else if (search < p[mid])
{
low = mid + 1;
}
}
return -1;
}
void main()
{
int n, found, search;
printf("Enter the number of element\n");
scanf("%d", &n);
int s[n];
printf("Enter Elements Either Ascending or Descending Order\n");
for (int i = 0; i < n; i++)
{
scanf("%d", &s[i]);
}
printf("Enter searching element\n");
scanf("%d", &search);
int low = s[0];
int high = s[n - 1];
if (low < high)
{
found = ascendingBinarySearch(s, n, search);
}
else
{
found = descendingBinarySearch(s, n, search);
}
found == -1 ? printf("Not Found") : printf("Element %d found at index %d", search, found + 1);
}
//This code is written by Souvik Ghosh
//Recursive Binary Search
#include <stdio.h>
//Recurcive binary search function for searching element in a ascending order array
int ascending(int *p, int left, int right, int search)
{
int mid = (left + right) / 2;
if (left > right)
{
return -1;
}
if (search == p[mid])
{
return mid;
}
else if (search < p[mid])
{
ascending(p, left, mid - 1, search);
}
else if (search > p[mid])
{
ascending(p, mid + 1, right, search);
}
}
//Recursive binary search function for searching element in a descending order array
int decending(int *p, int left, int right, int search)
{
int mid = (left + right) / 2;
if (left > right)
{
return -1;
}
if (search == p[mid])
{
return mid;
}
else if (search < p[mid])
{
decending(p, mid + 1, right, search);
}
else if (search > p[mid])
{
decending(p, left, mid - 1, search);
}
}
void main()
{
int size, search, low, high, found;
printf("Enter the number of elements\n");
scanf("%d", &size);
int sgg[size];
printf("Enter the elements\n");
for (int i = 0; i < size; i++)
{
scanf("%d", &sgg[i]);
}
printf("Enter the element you want to search\n");
scanf("%d", &search);
low = sgg[0];
high = sgg[size - 1];
if (low < high)
{
found = ascending(sgg, 0, size - 1, search);
}
else
{
found = decending(sgg, 0, size - 1, search);
}
found == -1 ? printf("Not Found") : printf("Element %d found at index %d", search, found + 1);
}