• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Бинарный Поиск В Массиве

  • Автор темы ЮрийПрп
  • Дата начала
R

rrrFer

Код:
/*###############
Бинарный поиск
##############################################*/
#include <iostream>

using namespace std;

int main()
{
//Максимальное количество чисел в массиве
const int MAX = 100;
//Максимальное значение чисел
int result[MAX];
//Найденно ли значение?
bool found = false;
//для поиска
int criterion = 0;
int end = MAX - 1, beginning = 0, center;
//Вспомогательная переменная для замены
int exchangeTemp;

//Генератор случайных чисел
srand(time(NULL));

cout << "Binary search" << endl;
for (int index = 0; index < MAX; index++) {
result[index] = rand() % 200;
}
cout << "The unsortieren values are: " << endl;
for (int index = 0; index < MAX; index++)
cout << result[index] << ' ';

cout << endl;
cout << "Now about bubblesort sorting." << endl;

//сортировка
for (int i = 0; i < MAX; i++)
for (int k = 0; k < MAX - i - 1; k++)
if (result[k] > result[k + 1]) {
exchangeTemp = result[k];
result[k] = result[k + 1];
result[k + 1] = exchangeTemp;
}

//отсортированный массив
cout << endl;
cout << "The sorted values are: " << endl;
for (int index = 0; index < MAX; index++)
cout << result[index] << ' ';

cout << endl;
cout << "Search for what? ";
cin >> criterion;


//поиск
while ((end >= beginning) && (found == false)) {
//вычисляем середину
center = (beginning + end) / 2;
if (criterion < result[center])
end = center - 1;
else
if (criterion > result[center])
beginning = center + 1;
else
found = true;
}


if (found == true) {
for (int i = center; i < MAX && result[i] == criterion; ++i)
cout << "The value "<< criterion <<" is at position:" << i << " : " << result[i] << endl;
for (int i = center - 1; i >= 0 && result[i] == criterion; --i)
cout << "The value "<< criterion <<" is at position:" << i << " : " << result[i] << endl;
}
else
cout << "The value "<< criterion <<" was not found. " << endl;

return 0;
}

Если хранить массив так, как это делаешь ты - лучшего варианта нету.
Но ПРАВИЛЬНЕЕ не хранить в массиве повторяющиеся значения, а хранить пары {значение, количество}
Если числа дробные - то хранить пары смысла нет, но и повторяющихся элементов в этом случае быть не может ))
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!