Java метод .sort () прерывает цикл while - PullRequest
1 голос
/ 13 октября 2019

Недавно начал изучать Java и во время реализации «бинарного поиска» обнаружил, что если я вызову Arrays.sort () для массива, в котором я собираюсь искать, то цикл станет бесконечным. Удаление / комментирование строки решает проблему, но я не могу понять, почему. Я хочу передать отсортированный массив методу .binarySearch (). Пытался разобраться с отладчиком, но не смог. Не хотите оставить этот вопрос без ответа, может кто-нибудь, пожалуйста, помочь?

import java.util.Arrays;

public class Main {

    static class BinarySearch {
        int binarySearch(int[] array, int value) {
            int low = 0;
            int high = array.length - 1;

            while (low <= high) {
                int mid = low + high / 2;
                int guess = array[mid];

                if (guess == value) {
                    return mid;
                } else if (guess > value) {
                    high = mid - 1;
                } else {
                    low = mid + 1;
                }
            }
            return -1;
        }
    }

    public static void main(String[] args) {
        BinarySearch bs = new BinarySearch();
        int[] a = {1, 3, 4, 45, 54, 666, 2, 4};
        Arrays.sort(a);

        int result = bs.binarySearch(a, 45);

        if (result == -1) {
            System.out.println("value not found");
        } else {
            System.out.println("value found at position: " + result);
        }
    }
}

1 Ответ

4 голосов
/ 13 октября 2019

Arrays.sort не имеет никакого отношения к тому, что вы заканчиваете бесконечным циклом. Это способ вычисления середины.

Должно быть (low + high) / 2. Вы, кажется, забыли добавить скобки.

...