xjunkiex
@xjunkiex

Что такое бинарный поиск?

Добрый день. Помогите понять, что такое бинарный поиск и правильно ли работает программа?
Каким образом вычисляются ответы?
Верно ли написан код?
#include<iostream>
#include <stdio.h>     
#include <stdlib.h>
using namespace std;
int main()
{
	int mas[20];
	for (int i=0;i<20;i++)
	{
	
	mas[i]=rand()%10;
    }
    for (int i=0;i<20;i++)
	cout<<mas[i]<<" ";
	cout<<endl;
	for (int i=0;i<19;i++)
	{
		for (int j=i+1;j<20;j++)
		{
			if (mas[i]>mas[j])
			{
				int temp=mas[i];
				mas[i]=mas[j];
				mas[j]=temp;
			}
		}
	}
	for (int i=0;i<20;i++)
	cout<<mas[i]<<" ";
	cout<<endl;
	int number;
	cin>>number;
	int left=0;
	int right=19;
	int pos;
	while (right-left>0)
	{
		pos=(left+right)/2;
		if (number>mas[pos])
		left=pos+1;
		else
		right=pos;
	}
	cout<<pos<<endl;
	
}

5a44bd52caa47091995786.png5a44bdb04904c558097452.png
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 3
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
RabraBabr
@RabraBabr
В вашем коде первым циклом массив заполняется рандомными числами (и да рандом традиционно не инициализирован).
Вторым циклом массив выводится на экран.
Далее судя по всему сортировка пузырьком.
Отсортированный массив выводится на экран.
После вводится число которое нужно найти в массиве.
Далее собственно сам бинарный поиск.
И наконец выводится индекс в массиве у найденного числа.
И да алгоритм работает неправильно так как 1 он не нашел, хотя с 6 и справился.
Ответ написан
Комментировать
@Wexter
Сперва сортируете массив по возрастанию, затем берёте значение из середины массива и сравниваете с необходимым вам значением, если необходимое значение меньше взятого - ищем дальше в левой половине, если больше - ищем в правой, берём значение из середины нужной нам половины и опять сравниваем, повторяем до тех пор, пока значение не будет найдено, либо не закончатся варианты
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы