A Simple Binary Search for Integers
BinarySearch(A[0..N-1], value)
{
low = 0
high = N - 1
while (low <= high) {
mid = low + ((high - low) / 2)
if (A[mid] > value)
high = mid - 1
else if (A[mid] < value)
low = mid + 1
else
return mid // found
}//while end
return -1 // not found
}
To implement Generic Binary Search
– Comparison must be based upon Data type of Input.
– to get Data type of Input
– sizeof( )
Eg:
#define TYPE(x)( sizeof(x) == sizeof(integer) ? return integer: sizeof(x) == sizeof(character) ? return char: sizeof(x) == sizeof(double)) ? return double : )
– Make function to compare according to size.
Compare (A[mid] , value)
{
if(TYPE(A[mid] != TYPE(value)) return null;
if ( TYPE( A[mid] == integer ){
//Simple comparison and return
}
if ( TYPE( A[mid] == character ){
// Compare with User Defined which function which checks for lexicographic order.
//See Void CompareLexo()
}
}//
Compare Void CompareLexo(){
//pseudo code to understand logic.
const char* string = "Bac";
int c = strcmp(string, "Bca"); //c will be <= -1
int c = strcmp(string, "B"); //c will be >=1
}
The same way you can think for Double , Structure etc Input and create your code.
PS : Please comment/mail us perfect running code or better logic