Ok, das war eine Interviewfrage in Adobe, und ich habe gerade versucht, herauszufinden, wie man das macht.
Jetzt habe ich die Lösung gefunden, also poste ich
void binary_search (int a[] , int low , int high , int key )
{
int mid = (low+high)/2;
if (key == a[mid]) {
printf ("Number Found\n");
return;
}
else {
int sign = Calc_sign (key-a[mid]);
low = low*sign + (1-sign)*mid;
high = mid*sign + (1-sign)*right;
binary_search (a,low,high,key);
}
}
int Calc_sign(int a)
{
return ( (a & 80000000) >> 31);
}
Im Code wird also nur ein Vergleich durchgeführt, um zu prüfen, ob der Schlüsselwert dem mittleren Element entspricht.
--
Gracias
Alok Kr.