egonSchiele/grokking_algorithms

A problem in many binary search implementations

stackcats opened this issue · 6 comments

The problem is in the assignment

mid = (low + high) / 2

It can lead to overflow in some language

Good to know, which language/languages can this be an issue?

C/C++, Java, etc

C/C++, Java, etc

Is there any example?

You have to round the mid number down manually

Maybe it's better to use binary shift operator instead of dividing by two and type conversions? I guess most of all programmic languages have it.

I used it, during the grokking binary search algorythm:

$mid = ($low + $high) -shr 1
(0 + 5) -shr 1  # 2, ok
(0 + 7) -shr 1  # 3, ok

There is a problem with the conversion from float to integer, for example, PoSh round a float to nearest even, not to down:

[int]( (0 + 5) / 2 ) # 2, ok
[int]( (0 + 7) / 2 ) # 4, expect 3