A Simple Binary Search for Integers
- 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.
PS : Please comment/mail us perfect running code or better logic
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 :
)
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
//In case of//
const char* string = "Bac";
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