Я неправильно использую логический оператор?

Я пытаюсь посмотреть в массив, чтобы увидеть, если точный элемент (х) найден в нем.
Для этого я говорю в начале проблемы, что contor = 0 (логический параметр), что означает, что в массиве нет x, но если во время выполнения цикла for и в массиве найден x, я сказал, что contor = 1 … и в конце я сделал тест if (contor) else, и он не работает в случае, когда x не найден в массиве. Это просто ничего не показывает. Я не понимаю … Я новичок. Спасибо!

  #include<iostream>

using namespace std;

void main()

{int x, st, dr, m,n,i,contor=0;       //dr = right, st = left, m=middle;
int v[100];

cout << "How many elements will the array have?";
cin >> n;
cout << endl;

for (i = 0; i < n;i++)
{cout << "Insert a element in the array:";
cin >> v[i];
}

cout << "Which is the number you are looking for?";
cin >> x;

st = 0;
dr = n - 1;

for (i = st; i <= dr;)

{m = (st + dr) / 2;

if (v[m] == x)
{ contor = 1;
break;
}
else if (v[m] > x)
dr = m - 1;
else st = m + 1;
}

if (contor)
cout << "The element you are looking for is in the array.";
else
cout << "The element you are looking for is NOT in the array.";

cin.get();
cin.get();
}

1

Решение

Вы пытаетесь выполнить бинарный поиск, но вы делаете это в бесконечном цикле. Если элемент найден, вы выходите из цикла, но если он не найден, ваш цикл продолжается бесконечно. Кроме того, вы пытаетесь выполнить бинарный поиск в массиве, который не гарантированно упорядочен. Предполагая, что массив упорядочен, это означает, что:

я <= j <=> V [I] <= v [j]

это то, что может работать:

do {
m = (st + dr) / 2;
if (v[m] == x) {
contor = 1;
break;
} else if (v[m] > x) {
dr = (st + m - 1) / 2;
} else {
st = (m + dr + 1) / 2;
}
} while (st < dr);
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector