Итак. Я уже узнал о бинарном поиске и о том, как он работает, и даже попробовал его, используя постоянный массив без какого-либо ввода от пользователя, но теперь я пытаюсь применить вектор вместо массива, чтобы пользователь вводил значения обоих список, в котором нужно искать числа из vector и цель для поиска. Здесь я использовал обычный метод «разделяй и властвуй» при использовании массива
using namespace std;
int Binary_search(int x[],int size,int target){
int maximum= size-1;
int minimum = 0;
int mean;
while (maximum>minimum){
mean = (maximum+minimum)/2;
if (x[mean] == target){
cout << "The number you're looking for is found! \n";
return mean;
}
else if(x[mean] > target){
maximum = (mean-1);
}
else{
minimum = (mean+1);
}
}
return -1;
}
int main(){
int x[]={1,2,3,4,5};
int a=sizeof(x)/sizeof(x[0]);
int target=4;
int show=Binary_search(x,a,target);
if (show != -1){
cout << "Your result is in the index: " << show;
}
return 0;
}
Моя проблема в том, что я использовал почти такой же метод, используя вектор, но он показывает либо бесконечное количество ** Ваш результат найден в индексе : ** (номер неверного индекса). Или это не показывает никакого результата вообще или даже показывает, что результат не найден, отличается каждый раз как-то. Вот при использовании вектора
#include <iostream>
#include <vector>
using namespace std;
int Binary_search(vector<int>x,int target){
int maximum=(x.size())-1;
int minimum = 0;
int mean;
while (maximum>minimum){
mean = (maximum+minimum)/2;
if (x[mean] == target){
cout << "The number you're looking for is found! \n";
}
else if(x[mean] > target){
maximum = (mean-1);
}
else{
minimum = (mean+1);
}
}
return -1;
}
int main(){
unsigned int i;
int n;
vector<int>x;
cout << "Enter the amount of numbers you want to evaluate: ";
cin >> i;
cout << "Enter your numbers to be evaluated: " << endl;
while (x.size() < i && cin >> n){
x.push_back(n);
}
int target;
cout << "Enter the target you want to search for in the selected array \n";
cin >> target;
int show = Binary_search(x,target);
if (show == -1){
cout << "Your result is not found ! ";
}
else{
cout << "Your result is in the index: " << show;
}
return 0;
}
Так что я думаю, что проблема в этой части int maximum=(x.size())-1;
, Может быть, речь идет о том, как использовать размер векторов? Может ли кто-нибудь просветить меня до этого