二进制搜索程序未打印正确的索引
Posted
技术标签:
【中文标题】二进制搜索程序未打印正确的索引【英文标题】:Binary Search Program Not Printing Correct Index 【发布时间】:2021-12-15 05:42:27 【问题描述】:我需要创建一个二分搜索程序,如果搜索键在数组中,它会返回 a[i] 等于键的最大索引 i,否则返回 -i,其中 i 是使 a[i] 小于 key 的最大索引。
示例运行如下。
更多输入.txt 2 3 4 5 6 6 6 7 8 9 11
java BinarySearch input.txt 10
-9
java BinarySearch input.txt 6
6
到目前为止,程序将打印输入文件中数字的正确索引,但当我输入不在列表中的数字时,它不会打印 -i。例如,当我在命令行中输入 10 时,它不会打印 -9;相反,它打印 -10。
public class BinarySearch
public static int search(int key, int [] a, int lo, int hi)
int n = a.length;
if (hi >= lo)
int mid = lo + (hi - lo) / 2;
if ((mid == n-1 || key < a[mid+1]) && a[mid] == key)
return mid;
else if (key < a[mid])
return search(key, a, lo, (mid-1));
else return search(key, a, (mid+1), hi);
return -1*lo;
public static void main (String [] args)
In in = new In(args[0]);
int key = Integer.parseInt(args[1]);
int [] a = in.readAllInts();
System.out.println(search(key, a, 0, a.length-1));
【问题讨论】:
【参考方案1】: public static int search(int key, int [] a, int lo, int hi)
int n = a.length;
if (hi > lo)
int mid = lo + (hi - lo) / 2;
if ((mid == n-1 || key < a[mid+1]) && a[mid] == key)
return mid;
else if (key < a[mid])
return search(key, a, lo, (mid-1));
else return search(key, a, (mid+1), hi);
else if(hi == lo && n == hi)
return -1*(lo);
else if(lo > hi)
return -1;
return -1*(lo-1);
我添加了两个条件:
-
当
hi==lo && hi == n
表示数组的最大值小于key且search()
返回最高索引时-(i)
当lo > hi
表示数组的最小值大于key且search()
返回-1时
并编辑了之前未满足的所有其他条件
return -1*(lo-1);
当lo == hi
和hi != n
然后返回前一个索引(i)
【讨论】:
工作就像一个魅力!而且你的解释很全面。非常感谢您的帮助!以上是关于二进制搜索程序未打印正确的索引的主要内容,如果未能解决你的问题,请参考以下文章