Задание: Создать массив случайных чисел, отсортировать его по убыванию, а затем провести двоичный поиск числа в данном массиве. Число вводит пользователь с клавиатуры.
Проблема где-то в двоичном поиске, прошу помочь и объяснить ошибку.
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
Random rand = new Random();
int arr[] = new int[20];
for (int i = 0; i < arr.length; i++) { //Заполнение массива
arr[i] = rand.nextInt(50);
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
for (int i = 0; i < arr.length - 1; i++) {
for (int j = arr.length - 2; j >= i; j--) { //Cортировка по убыванию
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int j = 0; j < arr.length; j++) { //Вывод отсортированого массива
System.out.print(arr[j] + " ");
}
System.out.println();
System.out.println("Введите число для поиска");
int search = s.nextInt();
int nX = -1;
int L = 0;
int R = arr.length - 1;
for (int j = 0; j < arr.length; j++) {
while (L <= R) {
int k = (L + R) / 2;
if (k == search) {
nX = k;
break;
}
else if (k < search) {
R = k - 1;
}
else if (k > search) {
L = k + 1;
}
}
}
if (nX == -1) {
System.out.println("Искомого числа нет в массиве");
} else {
System.out.println("Искомое число было найдено и равно " + nX);
}
}
}
Ошибок куча
Зачем нужен этот цикл?
for (int j = 0; j < arr.length; j++) {
Из этого
int k = (L + R) / 2;
if (k == search) {
k
- индекс текущего проверяемого числа. И сравнивается с самим числом. Бред.
3.
break
Вышли из while
цикла for
продолжает крутиться
Итого, должно быть, что-то типа такого
int nX = -1;
int L = 0;
int R = arr.length - 1;
while (L <= R) {
int k = (L + R) / 2;
if (arr[k] == search) {
nX = arr[k];
break;
}
else if (arr[k] < search) {
R = k - 1;
}
else if (arr[k] > search) {
L = k + 1;
}
}
if (nX == -1) {
System.out.println("Искомого числа нет в массиве");
} else {
System.out.println("Искомое число было найдено и равно " + nX);
}
Адекватность проверки if (nX == -1)
оставляю на Вашей совести. Я бы не был бы так уверен, что в массиве не встретится -1
Эта строка
System.out.println("Искомое число было найдено и равно " + nX);
легко заменяется на такую
System.out.println("Искомое число было найдено и равно " + search);
Может логичнее выводить индекс найденного числа?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Помогите, очень нужна функция Лапласа - она же функция ошибок, она же erf()
Здравствуйте! Пытаюсь подключиться к БД-ке через консоль(это сервер здесь), но здесь не знаю как делать дальше, застрял Клиент через серверный...
Необходимо реализовать запись логов событий активного приложения в формате: "Имя нашего приложения" - событие "Стороннее приложение" - просто...