- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我制作了一个二进制搜索程序,它基本上使用分而治之的方法搜索值。问题是它不适用于列表中最低值和最高值的中点以下的值。例如,如果我输入 33 和 99,它可以找到所有高于 64 但不低于它(或 64 本身)的值。如果找不到该值,程序将返回 -1。有人可以解释为什么这是一个问题吗?我猜我使用的算法错误。另外,我希望它是递归的。
public class BinarySearch
{
static Console c;
public static void main (String[] args)
{
c = new Console (30,100);
c.print("Lowest number on the list: ");
int low = c.readInt();
int tempLow = low;
c.print("Highest number on the list: ");
int high = c.readInt();
c.print("The number you want to find in the list: ");
int val = c.readInt();
int[] nums = new int[high+1];
c.print("\n");
for(int i = 1; i < nums.length; i++) //add all the values into the array
{
nums[i] = low;
low++;
}
for(int i = 1; i < nums.length; i++) //print hte array
{
c.print("[#" + i + "]" + nums[i] + " ");
}
c.println("\n\n" + "The position of " + val + " is " + binarySearch(nums, tempLow, high, val));
}
public static int binarySearch(int[] array, int lowestNumber, int highestNumber, int value)
{
int midpoint = (lowestNumber + highestNumber) / 2; //(x2+x1)/2 finding midpoint in array
if (lowestNumber > highestNumber)
{
return -1;
}
if (value == array[midpoint]) //if the value we're looking for is the midpoint then return that position of the value in the array
{
return midpoint;
}
else if (value < array[midpoint]) // otherwise it isn't the value, so if the value is less than the midpoint then search the top half of the array
{
return binarySearch(array, lowestNumber, midpoint - 1, value); //send in the lowest number and the midpoint-1 as the highest number (not including midpoint because we already know it isn't the value)
}
else // otherwise it isn't the value, so if the value is less than the midpoint then search the bottom half of the array
{
return binarySearch(array, midpoint + 1, highestNumber, value); //send in the highest number and midpoint-1 as the lowest number to find the midpoint between those two
}
}
}
最佳答案
尝试将数组的大小更改为:
int[] nums = new int[high-low+2];
因为大小不应该只是高数的值,而是低和高之间的差值。搜索算法是正确的,但您应该通过发送 0 作为低值和数组大小作为高值来调用它,因此您的调用应该如下所示:
c.println("\n\n" + "The position of " + val + " is " + binarySearch(nums, 0, nums.length, val));
关于java - 对于两个值的中点以下的值,二进制搜索算法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28639355/
这个问题在这里已经有了答案: standalone parentheses in javascript [duplicate] (5 个答案) 关闭 8 年前。 我在学习JavaScript,有时会
我是mysql新手,我必须减少以下更新查询的执行时间 UPDATE temp_countcalculations, ( SELECT count(*) as insuffcounts,CRP_
def escape_html(s): for (i, o) in (("&","&"),(">", ">"),(" "变成 ">"等。 关于python - 以下 for 循环
if (read(read(cin, data1), data2)) 问题是C++ Primer 5th Edition 的练习。 read 函数定义如下: std::istream &read(st
我想创建两个宏。其中一个将扩展到函数原型(prototype)和函数内容,另一个将扩展到仅函数原型(prototype)。我正在考虑创建以下内容: #ifdef SOME_CONDITION #def
我正在使用 jongo API - org.jongo.MongoCollection 是类。 我有对象 ID 列表并转换为与 ObjectId[] 相同并尝试按如下方式查询 collection.f
有人可以解释以下正则表达式匹配什么吗? ^.*$ 谢谢! 最佳答案 或者整个字符串或者整行,取决于是否multiline mode被使用。 关于java - 以下 ^.*$ 正则表达式匹配什么?,我们
#include void main() { int a,b,c; for(b = c = 10; a = "- FIGURE?, UMKC,XYZHello Folks,TFy!QJ
我的代码段中的以下代码行被 Sonar 检测为问题。 代码段: final int Pending=1; Sonar 问题: Name 'Pending' must matc
Print name of all activities with neither maximum nor minimum number of participants 我尝试了以下查询,但出现错误:
这个问题在这里已经有了答案: What is this practice called in JavaScript? (7 个回答) 关闭8年前。 (function() { //do stuff
根据任务,我们必须通过 foldr 实现 foldl。通过比较函数签名和 foldl 实现,我得到了以下解决方案: myFoldl :: (a -> b -> a) -> a -> [b] -> a
这个问题在这里已经有了答案: Export an es6 default class inline with definition or at end of file? (1 个回答) 关闭 2 年
据我了解,以下是相同的: Person p{}; // Case 1 Person p = {}; // Case 1.5 我注意到 Person p = Person{}; // Case 2 产生
below i have given a javascript code picture `` can any one help me in this code. what do this code.
我想在标题和正文上搜索全文,并在答案计数上进行过滤。 我阅读了elasticsearch documentation for combining filters并构建了此查询。 "query": {
它是流动的 C 代码中的内存泄漏吗? #include int *a; int main() { a = malloc(sizeof(int)*10); return
这两个声明有什么区别: char (*ptr)[N]; 对比 char ptr[][N]; 谢谢。 最佳答案 (1)声明 char (*ptr)[N]; ptr 是指向大小为 N 的字符数组的指针 下
data II = I Int Int deriving (Show) instance II Show where show I a b = show (a+b) showt.hs:3:2: s
我从 clojuredoc 中阅读了关于 condp 的文档。在文档中我找到了以下代码: (condp 一些 [1 2 3 4] #{0 6 7} :>> 公司 #{4 5 9} :>> 十二月 #{
我是一名优秀的程序员,十分优秀!