Почему мой двоичный поиск с использованием цикла while не работает?

#binary-search

Вопрос:

Я попытался написать двоичный код поиска, используя цикл while, но я что-то пропустил, потому что он работает не для всех входных данных.

 function solution(A, X) {
    var N = A.length;
    if (N === 0) {
        return -1;
    }
    var l = 0;
    var r = N-1;
    while (l < r) {
        var m = Math.floor((l   r) / 2);
        if (A[m] > X) {
            r = m - 1;
        } else {
            l = m;
        }
    }
    if (A[l] == X) {
        return l;
    }
    return -1;
}
 

что я пропустил?

Ответ №1:

Вы допустили ошибки в трех пунктах:

  1. В то время как цикл: Это должно быть

    while (l <= r)

  2. Другое условие, когда X > A[m]:

    l = m 1;

  3. Нахождение элемента. В двоичном поиске мы проверяем элемент, присутствующий в середине, где, как вы проверяете, находится[l]. Это должно быть
      if (A[m] == X){
      return m;
    }
     

А также вы написали N===0. Возможно, вы допустили синтаксическую ошибку.