在OCaml中的有序数组内进行二进制搜索

时间:2015-11-29 09:47:07

标签: functional-programming ocaml ocaml-batteries

LinearAccelerationEvent

我正在尝试在OCaml中进行二进制搜索。这段代码有什么问题?它总是返回-1。它是一个字符串数组,以便比较元素给出值0,-1或1,如果它们相等,第一个元素较小,第一个元素分别大(文档说明正负整数但我已在解释器中测试并收到1和-1) )。关于我在这里犯的错误的暗示?

1 个答案:

答案 0 :(得分:2)

将此if (String.compare arr.(mid) word = 1)更改为-1

如果左侧大于右侧,

String.compare会返回1

注意:所采用的一般方法包含维基百科文章中描述的较小的已知错误: https://en.wikipedia.org/wiki/Binary_search_algorithm#Implementation_issues

基本上,将mid计算为(min + max) / 2可以为足够大的数字提供整数溢出。