Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Nikita Trigon Знаток (278), на голосовании 1 год назад
Алгоритм{1 ,2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
Дополнен 1 год назад
Что я сделал не так?
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;}//двигаем границу первого элемента
}
}
Голосование за лучший ответ
Оракул Оракул (62095) 1 год назад
Да тут все красное не компилится
din - bin
int din[] - такое объявление массива c-style, в java объявляется так int[] din
break вне цикла while вообще, не в блоке if, после которого красный else if
вот это if(bin[middle]=gde) не сравнение, а присваивание
Вывести надо наверное не искомый элемент, а его позицию в массиве, иначе смысл какой
И в алгоритме ошибка, оба раза сравниваете на больше
И самое прикольное вы ищете то, чего нет в массиве

 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;
}//двигаем границу первого элемента
}
}
Похожие вопросы