Я стремлюсь к функции бинарного поиска, которая задает элемент в векторе, ищет элемент, который находится ближе всего к этому элементу, но все же меньше или равен ему. Однако мой код приводит к мусорным числам. Вот мой код:
int close(vector<int> r, vector<int> g, int pos){
int lastpos = 0;
int mid = int((r.size())/2);
while(mid>=1){
if(r[lastpos+mid]>g[pos]){}
else{
lastpos += mid;
if(r[lastpos+1]>g[pos] || r[lastpos]==r[r.size()-1]){
return r[lastpos];
}
}
mid/=2;
}
return r[0];
}
Например, если я вызываю функцию с помощью (r, g, 1) и мне дается, что g [1] = 3, а вектор r содержит {1 , 3, 4}, эта функция установит середину на 3/2, но округлит ее до целого числа, то есть единицы. Последняя позиция (lastpos) по умолчанию установлена в 0. Теперь моя функция проверит, если r [lastpos + mid]> g [pos] или 3> 3. Это не потому, что они равны. Теперь моя функция перейдет к условию else и добавит mid к lastpos. Теперь lastpos = 1. Теперь он проверит, если r [lastpos + 1]> g [pos], чтобы увидеть, является ли это минимальное значение, которое ближе всего и меньше или равно g [1]. Поскольку следующий элемент равен 4, а 4 больше 3, он вернет 3.
Однако, если lastpos является конечным элементом, он просто вернет конечный элемент, поскольку больше нет чисел для проверки. ,
Исключения : Если в векторе r нет такого элемента, который меньше или равен элементу в векторе g, он вернет первый элемент в векторе r.
Примечание : эти векторы отсортированы