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.
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? 🤔
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)
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
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
list
anditemToFind
should very much be parameters that are passed to the functionparseInt
. 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 isstart + ((end - start ) / 2)
Might be interesting to notereturn -1
isreturn -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.I like your idea of returning -start.
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? 🤔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, thenMath.floor
is the standard function to use.e.g.
start + Math.floor((end - start) / 2)