170 похожих чатов

Помогите пожалуйста,задание кода такое что нужно выполнить поиск заданного значения

в массиве, используя линейный(первое вхождение) и бинарный (последнее вхождение)алгоритмы поиска. Проблема в том что бинарный поиск показывает последнее значение в некоторых ситуациях(зависит от того как заполниться рандомно массив) на одну ячейку раньше. Что не так в коде?
#include <iostream>
#include <algorithm>
using namespace std;
void linsearch(int* a, int n, int key) {
a[n] = key;
int i=0;
while (a[i] != key) i++;
if (i == n)
cout << "\nЭлемент не найден"<<endl;
else
cout << "\n\nЛинейный поиск:" << endl;
cout << "Первое вхождение элемента найдено на позиции под номером " << i+1<<"\n"<<endl;
};
void binsearch(int* a, int n, int key) {
int l = 0, r = n - 1, s;
bool Found = false;
while ((l <= r) && !Found)
{
s = (l + r) / 2;
if (a[s] == key)
Found = true;
else
if (a[s] < key)
l = s + 1;
else
r = s - 1;
}
cout << "================================================================";
cout << "\nБинарный поиск:";
if (Found == true) cout << "\nПоследнее вхождение элемента найдено на позиции под номером " <<s+1<< " \n"<<endl;
else cout << "Элемент не найден!\n";
}
int a[100];
int main() {
setlocale(LC_ALL, "Ru");
int I, n,l,r,s;
int key;
cout << "Элемент=";
cin >> key;
cout << "Введите размер массива:";
cin >> n;
for (I = 0; I < n; I++)
{
a[I] = rand() % 10;
cout <<a[I]<<" ";
}
sort(a, a + n);
cout << "\nОтсортированный массив" << endl;
for (I = 0; I < n; I++)
{
cout << "|" << a[I];
}
linsearch(a, n, key);
binsearch(a, n,key);
system("pause");
return 0;
}

1 ответов

13 просмотров

Бинарный поиск должен искать в сортированном массиве, там понятия "первый" и "последний" как-то странно выглядят

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта