没有if-else语句的二进制搜索

时间:2015-10-09 23:45:36

标签: scala logic binary-search

我想在Scala中编写一个二进制搜索程序,而根本不使用任何if-else语句。我设计的基本策略使用array [mid]和search_key之间的比较返回值。简而言之:

1)根据array [mid]和search_key

之间的比较生成返回值

2)使用该返回值创建唯一字符串。

3)使用'反射'借助该字符串

所以我的问题是......在这种情况下是否存在返回不同值的计算逻辑?我怎样才能实现这一目标?例如:

if array[mid] == search_key , return 0
if array[mid] > search_key , return 1
if array[mid] < search_key , return 2

如果有人对此问题有任何更好的解决方案,请同时建议。

1 个答案:

答案 0 :(得分:2)

执行类似操作的简单方法是

array(mid) compareTo search_key

这一行相当于

if (array(mid) == search_key) 0
else if (array(mid) < search_key) -1
else 1 // if (array(mid) > search_key)

至于执行此操作的最佳方式,您可以执行一系列操作,并计算该序列的索引。如果您有兴趣,可以在https://gist.github.com/kolmar/bcfc94ee4051ee7eb3a1

中查看完整代码