sarged:
Если ответа в этой ветке не будет, посоветую обратиться в сервисдеск на предмет того "это так задумано или баг?"; обстоятельно, без эмоций описать проблему и далее - по ситуации.
Но это конечно же дурацкое решение, а нужно переписывать алгоритм, может если кто сталкивался, покажите плиз как можно переписать этот алгоритм более эффективно?
sarged:
Так и задумано. Метод QuickSearch(...) организует "нечёткий" поиск. Это нужно для тог чтобы работали методы SearchGreat(...), SearchLessOrEqual(...) и др.
Чтобы наверняка определить наличие заданной строки используйте Search(...)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
{
int i,j,m=-1;
string t_string;
//--- search
i=0;
j=m_data_total-1;
while(j>=i)
{
//--- ">>1" is quick division by 2
m=(j+i)>>1;
if(m<0 || m>=m_data_total) break;
t_string=m_data[m];
if(t_string==element) break;
if(t_string>element) j=m-1;
else i=m+1;
}
//---
return(m);
}
Итак что мы имеем? Если размер массива 1, и в нем нету строки, вместо -1 функйция возвращаяет 0, то есть как будто бы то что мы искали найдено в массиве на позиции 0.
Из за этого все алгоритмы у меня встали, потому что сначала надо в массиве проверить поиском, и если найдено то ничего не делать, а если не найдено то добавлять. И это важно, потому что даже если массив с размером 1, мы должны точно знать соответствует ли эта единственная строка тому что мы искали или нет.
итак что происходит, после деления (0+0)/2 ----> m равна 0, строка больше или меньше элемента, j или i меняется, как будто функция продолжалась бы дальше, а нет. Уже условие while(j>=i) не выполняется, в итоге возвращается последняя m, которая после деления была равна 0, и в этом ошибка!
Если не верите, сами проверьте.
Чтобы продемонстрировать, я сделал временное решение, которое исправляет эту проблему:
if(t_string>element)
{
j=m-1;
if (j>=i) {}
else {m=-1;};
}
else
{
i=m+1;
if (j>=i) {}
else {m=-1;};
}
Но это конечно же дурацкое решение, а нужно переписывать алгоритм, может если кто сталкивался, покажите плиз как можно переписать этот алгоритм более эффективно?