DEV Community

Discussion on: Binary Search

Collapse
 
stefnotch profile image
stefnotch

Nice explanation and congratulations on presenting an actually correct variant of binary search. 🚀

Since I believe that anything can be improved, no matter how nice it is, here is some feedback:
Issues

  • No parameters. list and itemToFind should very much be parameters that are passed to the function
  • Usage of parseInt. It's really not needed and it just causes a performance overhead.
  • (start + end) / 2 isn't ideal either, since with large enough arrays, this can cause some overflowing/rounding. The improved variant is start + ((end - start ) / 2) Might be interesting to note
  • An alternative to return -1 is return -start. Then, the negative return value would point at the smallest element that's >= itemToFind. And that's pretty useful when one wants to insert a new element.
Collapse
 
aminmansuri profile image
hidden_dude

I like your idea of returning -start.

Collapse
 
hajarnasr profile image
Hajar | هاجر

Thank you so much for your feedback @stefnotch . 😀
I fixed the no-parameters issue but am curious, why do you think that parseInt isn't needed here? Aren't we using it to avoid having fractions in the middle index? 🤔

Collapse
 
stefnotch profile image
stefnotch

I see, I missed that detail!

Although, parseInt is not designed for that. It's purpose is to turn a string (text) into a number. If the intention is to chop off the fractional part, then Math.floor is the standard function to use.
e.g. start + Math.floor((end - start) / 2)