let find arr word =
let rec binaryserach arr word min max =
let mid = (min + max)/2 in
if max < min then -1 else
if (String.compare arr.(mid) word = 0) then mid else
if (String.compare arr.(mid) word = 1) then (binaryserach arr word (mid+1) max) else
binaryserach arr word min (mid-1) in
binaryserach arr word 0 ((Array.length arr) - 1) ;;
Я пытаюсь сделать двоичный serach в OCaml. Что не так в этом коде? Он всегда возвращает -1. Это массив строк, так что сравнение элементов дает значения 0, -1 или 1, если они равны, первый элемент меньше и первый элемент больше соответственно (в документации указаны положительные и отрицательные целые числа, но я тестировал в интерпретаторе и получал 1 и -1). Любой намек на ошибку, которую я здесь сделал?Двоичный поиск внутри сортированного массива в OCaml
Это дает те же результаты при использовании =, <,and > вместо String.compare. Итак, проблема в другом: –
вы можете добавить код вызова? – Grozz
'find [|" a "; "B"; "c" |] "a" 'возвращает -1 @Grozz –