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

二元搜寻

柴声
2023-03-14
本文向大家介绍二元搜寻,包括了二元搜寻的使用技巧和注意事项,需要的朋友参考一下

对列表进行排序后,我们可以使用二进制搜索技术在列表中查找项目。在此过程中,整个列表分为两个子列表。如果在中间位置找到该项目,它将返回该位置,否则将跳转到左或右子列表,然后再次执行相同的过程,直到找到该项目或超出范围为止。

二进制搜索技术的复杂性

  • 时间复杂度最佳情况下为O(1)。O(log2 n)用于一般情况或最坏情况。

  • 空间复杂度: O(1) 

输入输出

Input: A sorted list of data: 12 25 48 52 67 79 88 93
The search key 79
Output:
Item found at location: 5

算法

binarySearch(array, start, end, key)

输入-排序后的数组,开始和结束位置以及搜索键

输出-键的位置(如果找到),否则位置错误。

Begin
   if start <= end then
      mid := start + (end - start) /2
      if array[mid] = key then
         return mid location
      if array[mid] > key then
         call binarySearch(array, mid+1, end, key)
      else when array[mid] < key then
         call binarySearch(array, start, mid-1, key)
   else
      return invalid location
End

示例

#include<iostream>
using namespace std;

int binarySearch(int array[], int start, int end, int key) {
   if(start <= end) {
      int mid = (start + (end - start) /2); //mid location of the list
      if(array[mid] == key)
         return mid;
      if(array[mid] > key)
         return binarySearch(array, start, mid-1, key);
         return binarySearch(array, mid+1, end, key);
   }
   return -1;
}

int main() {
   int n, searchKey, loc;
   cout << "Enter number of items: ";
   cin >> n;

   int arr[n]; //create an array of size n
   cout << "Enter items: " << endl;

   for(int i = 0; i< n; i++) {
      cin >> arr[i];
   }

   cout << "Enter search key to search in the list: ";
   cin >> searchKey;

   if((loc = binarySearch(arr, 0, n, searchKey)) >= 0)
      cout << "Item found at location: " << loc << endl;
   else
      cout << "在列表中找不到项目。" << endl;
}

输出结果

Enter number of items: 8
Enter items:
12 25 48 52 67 79 88 93
Enter search key to search in the list: 79
Item found at location: 5
 类似资料:
  • 我试图在二叉树中查找节点,但是函数没有返回任何东西,NULL!对了,在printf,在 结果是对的,它只是不返回值,可能我在递归方面弄错了,我不知道。顺便说一句,如果我将最后一个返回 NULL 包装在其他内容中,它确实会返回有效的指针,但它会导致警告......

  • 我在做作业,实现自己的二叉查找树。问题是,我们有自己的节点实现,它的父节点是不可直接访问的。 我一直在寻找答案,但我不想完全照搬解决方案,尽管如此,我似乎仍然没有得到正确的答案。我错过了一些元素没有被删除的情况。 你能帮帮我吗?我做错了什么? 这是删除方法: 节点使用通用接口 只有比较的方法。它看起来像这样 我在remove中使用了另一种方法,它设置节点的父节点的子节点,具体取决于它的左子节点还是

  • 这种方法在确定树是否为BST时是错误的吗?节点的左子树仅包含键小于节点键的节点。节点的右子树仅包含键大于节点键的节点。左右子树也必须是二叉搜索树。我的代码是:

  • 本文向大家介绍浅析java 循序与二元搜索算法,包括了浅析java 循序与二元搜索算法的使用技巧和注意事项,需要的朋友参考一下 循序搜索法   就是一个一个去比较,找到时返回; 二元搜索法   二元搜索算法是在排好序的数组中找到特定的元素.   首先, 比较数组中间的元素,如果相同,则返回此元素的指针,表示找到了. 如果不相同, 此函数就会继续搜索其中大小相符的一半,然后继续下去. 如果剩下的数组

  • 主要内容:src/runoob/binary/BinarySearch.java 文件代码:一、概念及其介绍 二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件: 若它的左子树不为空,左子树上所有节点的值都小于它的根节点。 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。 它的左、右子树也都是二分搜索树。 如下图所示: 二、适用说明 二分搜索树有着高效的插入、删除、查询操作。 平均时间的时间复

  • 9.5. 搜索元素 通过一步步访问每一个节点的方式遍历 XML 文档可能很乏味。如果你正在寻找些特别的东西,又恰恰它们深深埋入了你的 XML 文档,有个捷径让你可以快速找到它:getElementsByTagName 。 在这部分,将使用 binary.xml 语法文件,它看上去是这样的: 例 9.20. binary.xml <?xml version="1.0"?> <!DOCTYPE gra