代码是一个简单的二分搜索程序。我试着追踪程序,但它只会让我更加困惑。我不明白为什么嵌套的if has data,min,midpoint-1,&target和底部的else if语句has data,midpoint+1,max,target。
public static boolean binarySearch(int[] data, int min, int max, int target){
boolean found = false;
int midpoint = (min + max) / 2; // determine the midpoint
if (data[midpoint] == target)
found = true;
else if (data[midpoint] > target)
{
if (min <= midpoint - 1)
found = binarySearch(data, min, midpoint - 1, target);
}
else if (midpoint + 1 <= max)
found = binarySearch(data, midpoint + 1, max, target);
return found;
}
数组数据已从最小到最大排序
因此,如果中点处的值大于目标,则目标将出现在中点之前的值中。因此,我们只在中点左侧递归调用方法,即从最小值到中点之前的值的所有值。
类似地,如果中点小于目标,则可以在中点之后找到目标,因此我们只递归调用中点右侧的方法,即从中点之后的值到末尾的所有值。
每次我们不包括中点,因为它在行中被选中
if (data[midpoint] == target)
例如阵列3、6、8、10、13、14、20。target=14中点将是=10 9index 4)。检查target和midpoint,我们会看到target大于中点,并且落在右边。所以我们现在在13 14 20中检查target--从midpoint+1(index 5)直到结尾。中点将是14。并且上面的if语句将返回true。
主要内容:src/runoob/binary/BinarySearch.java 文件代码:一、概念及其介绍 二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件: 若它的左子树不为空,左子树上所有节点的值都小于它的根节点。 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。 它的左、右子树也都是二分搜索树。 如下图所示: 二、适用说明 二分搜索树有着高效的插入、删除、查询操作。 平均时间的时间复
null 请记住,我是一个非常早期,初学者,婴儿程序员和DIY课,我正在学习的糟糕的解释东西。所以请简单明了。谢谢你。
二分搜索算法是一个简单方法,在已排序的元素列表中查找元素。它很容易描述为接受排序列表,并将其分成两半,直到找到它或遍历完。如果你完成了练习 20,那么这个练习应该比较容易。 如果我们想在已排序的数值列表中找到数字X,我们将这样做: 获取列表中间的数字(M)并将其与X进行比较。 如果X == M,你就完成了。 如果X > M,则在M + 1到列表末尾的区间内寻找。 如果X < M,则在列表开头到M
我一直在尝试使用Java的二分搜索方法在单词数组(一个词典)中搜索一个特定的字符串,然后确定该字符串是单词、前缀还是不是单词。如果返回的索引大于或等于零,则字符串为单词。如果返回的索引小于零,那么我必须确定它不是一个单词,还是一个前缀。
主要内容:src/runoob/binary/LevelTraverse.java 文件代码:二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(取出节点)和入队(存入下一层的节点)的操作,以此达到遍历的目的。 通过引入一个队列来支撑层序遍历: 如果根节点为空,无可遍历; 如果根节点不为空: 先将根节点入队; 只要队列不为空: 出队队首节点,并遍历; 如果队首节点有左孩子,将左孩子入队; 如果队首节点有右孩子,将右孩子入队; 下面依次演示如下步骤: (1)先取出
我写了一个二分搜索的递归程序,正如你所看到的,我试图在给定的数组中找到目标=21的位置,然后返回位置为2。但是,我的输出是1。当我调试它匹配att arr[start]=target时,它直接跳到findTheNumber(arr,mid+1,end,target)行;然后下一行,然后返回mid..只是想知道为什么我的返回在“返回开始”时中断了 }