使用JS编程:二进制搜索

了解数据结构,算法和基本编程概念对于成为一名更好的开发人员至关重要。 如今,大多数问题都可以使用现代工具和库来解决,但是对这一领域的深入了解肯定会拓宽您的软件开发视野。

就我个人而言,很难掌握其中一些概念,因为我在日常工作中没有使用它们。 我正在撰写本系列文章,以增进我对这些主题的理解并帮助其他像我这样的人。

什么是二进制搜索?

二进制搜索是一种用于在排序列表中查找特定项目的算法。 必须事先对列表进行排序,否则算法将不适用。 如果您曾经处理过二进制搜索树 ,则此算法的概念与此类似。

我们首先检查要查找的值是高于还是低于列表中的中间项。 为什么在中间? 这是排序部分的输入位置。通过检查搜索到的项目是高于还是低于中间值,您基本上可以忽略数组的一半。 如果项目较高,则它位于数组的右侧(因为它已预先排序)。 这意味着您可以完全离开左侧部分,仅在感兴趣的部分中搜索。

在整个数组中重复上述步骤,直到找到您的物品为止。 如果某个时候我们到达列表中的单个项目,并且它的值与我们要查找的值不同,那么我们知道我们的项目不在列表中。

可以应用此功能的情况是例如通过id查找项目。 也许您有一个对象列表,每个对象都包含一个ID。 如果列表已排序,则可以通过按项的id属性比较项来使用二进制搜索。

它是如何工作的?

我们首先选择列表的边界-起点,终点和中间。 通过将起点和终点相加,然后将其除以二舍入而计算出中间值。

然后,我们检查中间项目是否在寻找。 如果不是,我们检查它是更高还是更低。 以此为基础,我们改变了界限。 如果项目较低,则将结束点设置为等于中间值减去1。如果较高,则将起始点设置为等于中间值加上1。 中间部分被忽略,因为我们已经知道它不是我们想要的。 然后,我们重新计算中间值-开始+结束除以2,四舍五入然后再次走。 我们重复此过程,直到找到我们的商品或我们找到的商品与我们的商品不同。

如果您还没有使用二进制搜索树,或者在第一次听起来有点不知所措之前就没有听说过该算法。 但事实是您无需遍历列表中的每个项目,这是一大优势。 唯一的事情是您需要事先对项目列表进行排序,否则二进制搜索将无法进行。

这是该算法的实际代码:

感谢您的阅读,如果您正在寻找更多计算机科学JS的东西,我目前正在为他们编写一整套文章。 如果您需要常规的JS内容,则可以查看我的个人资料。

用JS编程:
递归https : //hackernoon.com/programming-with-js-recursion-31371e2bf808
合并排序https : //medium.com/@KondovAlexander/programming-with-js-merge-sort-deb677b777c0
二进制搜索https : //medium.com/@KondovAlexander/programming-with-js-binary-search-aaf86cef9cb3
插入排序https : //medium.com/@KondovAlexander/programming-with-js-insertion-sort-1316df8354f5

From: https://hackernoon.com/programming-with-js-binary-search-aaf86cef9cb3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值