当前位置: 首页 > 编程笔记 >

无需递归即可实现二进制搜索的Python程序

林礼骞
2023-03-14
本文向大家介绍无需递归即可实现二进制搜索的Python程序,包括了无需递归即可实现二进制搜索的Python程序的使用技巧和注意事项,需要的朋友参考一下

当需要不使用字典而执行二进制搜索时,可以定义一种方法,该方法检查列表的第一个和最后一个索引,并获取列表的中间值。

然后将其与需要检查的值进行比较。如果找到,则返回该值。否则,返回-1。

重要的是要记住,二进制搜索仅对升序或降序的排序元素起作用。

列表可用于存储异构值(即,任何数据类型的数据,例如整数,浮点数,字符串等)。

以下是相同的演示-

示例

def binary_search(my_list, elem):
   low = 0
   high = len(my_list) - 1
   mid = 0
   while low <= high:
      mid = (high + low) // 2个
      if my_list[mid] < elem:
         low = mid + 1
      elif my_list[mid] > elem:
         high = mid - 1
      else:
         return mid
   return -1

my_list = [ 1, 9, 11, 21, 34, 54, 67, 90 ]
elem_to_search = 1
print("The list is")
print(my_list)

my_result = binary_search(my_list, elem_to_search)

if my_result != -1:
   print("在索引处找到元素 ", str(my_result))
else:
   print("找不到元素!")
输出结果
The list is
[1, 9, 11, 21, 34, 54, 67, 90]
在索引处找到元素  0

解释

  • 定义了一个名为“ binary_search”的方法,该方法将列表和要搜索的元素作为参数。

  • 将变量low分配给0,将变量mid分配给0。

  • 变量high分配了list-1的长度。

  • 仅当值“低”小于或等于“高”时,才执行按位底数除法以获取“中”变量的值

  • 如果该值小于中索引处的值,则首先从低索引到中索引进行搜索。

  • 否则,如果该值大于中值但小于高值,则从中索引到高索引进行搜索。

  • 现在,定义了一个列表。

  • 通过将上面的列表作为参数传递来调用该方法。

  • 该操作的数据存储在变量中。

  • 此变量是控制台上显示的输出。

 类似资料:
  • 我正在尝试使用递归在python中实现二进制搜索树。我被困在程序中发生的一些无限递归中。我通过传递地址和数据对函数RecursBST进行递归调用,直到顶部遍历到它的左或右子级的None值为止。 我运行到以下错误:

  • 问题内容: 我知道Go有一个包含搜索功能的程序包,但这是出于教育目的。我一直在尝试在Go中实现二进制搜索算法,但无法使其正常工作。 这是我的代码: 它总是打印。为什么? 问题答案: 二进制搜索的逻辑是合理的。唯一的问题是您忘记了将每个递归调用的结果分配给和。 当前,您有以下这些递归调用: 您只需要分配结果:

  • 这是作业,不要贴代码。求你了,谢谢你。 我被指派创建一个计算BST中特定的深度的方法。 为此,我需要a方法。因此,要递归地找到它,我需要创建一个助手方法。 我知道我需要在树中搜索包含我要查找的数据的节点。为此,我编写了以下代码: 然而,这是行不通的,因为每次进行递归调用时,将保持;本质上,它是在重置深度值。我不知道如何在调用之间保持的值。

  • 从二叉查找树中删除节点时,您可以将节点替换为左侧的最大子节点或右侧的最小子节点。 我很难理解以下实现执行删除操作的方式。 上面的代码包括以下步骤: < li >查找替换节点。 < li >让替换节点引用已删除节点的左右子节点。 < li >让已删除节点的左右子节点将替换节点作为父节点。 < li >让替换节点引用已删除节点的父节点作为自己的父节点。 < li >清理。 我有困难的部分特别是递归。据

  • 我需要实现一个空函数,它计算二叉树中每个节点的高度,并将其存储在每个节点中。我在网上找到了一些本质上是递归的解决方案,但它们返回int。例子包括(https://www.geeksforgeeks.org/write-a-c-program-to-find-the-maximum-depth-or-height-of-a-tree/)。模型答案之间的区别,除了它不是空函数之外,它也不存储每个节点的

  • 我正在尝试实现一个二叉查找树,但是“搜索”函数对于除了根之外的每个条目都返回了错误的值。 该函数应返回其值与键参数匹配的节点的地址,如果节点不存在,则返回 NULL。 当我运行代码时,我得到以下内容: 我知道每个节点的“左”和“右”指针链接正确,因为“delAll”函数成功删除了所有节点。 将“cout”语句添加到“search”函数表明该函数似乎返回了正确的地址。为什么从主主调用时会打印错误的地