Top.Mail.Ru
Ответы

Сделать двоичный поиск. Закомментировать каждую строку с указанием её функции

Алгоритм{1 ,2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

Дополнен

Что я сделал не так?
public class Main {
public static void main(String[] args) {
int gde = 9;// то что ищем
int din[]=new int[]{1, 2, 3, 4, 5, 6, 7, 8}; //отсортированный массив
int ind1 =0; //начальный индекс
int ind2=bin.length-1; //последний индекс
while (ind1<=ind2){int middle=(ind1+ind2)/2;} //центр массива
if(bin[middle]=gde){ System.out.println(gde);}
break;
else if (bin[middle]>gde){
ind2=middle-1;}//двигаем границу последнего элемента
else if (bin[middle]>gde){
ind1=middle+1;}//двигаем границу первого элемента
}
}

По дате
По рейтингу
Аватар пользователя
Оракул

Да тут все красное не компилится
din - bin
int din[] - такое объявление массива c-style, в java объявляется так int[] din
break вне цикла while вообще, не в блоке if, после которого красный else if
вот это if(bin[middle]=gde) не сравнение, а присваивание
Вывести надо наверное не искомый элемент, а его позицию в массиве, иначе смысл какой
И в алгоритме ошибка, оба раза сравниваете на больше
И самое прикольное вы ищете то, чего нет в массиве

123456789101112131415161718
 public static void main(String[] args) { 
  int gde = 9;// то что ищем 
  int[] bin = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; //отсортированный массив 
  int ind1 = 0; //начальный индекс 
  int ind2 = bin.length - 1; //последний индекс 
  while (ind1 <= ind2) { 
    int middle = (ind1 + ind2) / 2; 
    if (bin[middle] == gde) { 
      System.out.println(middle); 
      break; 
    } else if (bin[middle] > gde) { 
      ind2 = middle - 1; 
    }//двигаем границу последнего элемента 
    else if (bin[middle] < gde) { 
      ind1 = middle + 1; 
    }//двигаем границу первого элемента 
  } 
}