Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Использование BinarySearch в DeCAL?   Найти похожие ветки 

 
Erik1 ©   (2005-06-13 17:13) [0]

Вопрос работает ли данная функция? У меня есть контейнер из 3 элементов функция сразвенеия выгладит так:
function ComparatorSID(ptr: Pointer; const obj1, obj2: DObject): Integer;
begin
Result := TRaw(obj1.VObject).Element.ID - obj2.VInteger;
end;
Провожу тест:
iter := BinarySearch(Raw.Container, [240851208]);
if atEnd(iter) then
 sysutils.Beep;
iter := BinarySearch(Raw.Container, [241048155]);
if atEnd(iter) then
 sysutils.Beep;
iter := BinarySearch(Raw.Container, [241117550]);
if atEnd(iter) then
 sysutils.Beep; //вот здесь ненаходит.

Вобщем неможет она найти последний элемент!


 
Erik1 ©   (2005-06-13 17:39) [1]

Вот аггоритм поиска:
function _binarySearchInWith(_start, _end : DIterator; compare : DComparator; const obj : DObject) : DIterator;
var dist, comp : Integer;
   last : DIterator;
begin

assert(diRandom in _start.flags, "Binary search only on random access iterators");
last := _end;
 result := last;

 repeat
   dist := distance(_start, _end) div 2;
   if dist <= 1 then //кажется в этом блоке ошибка?
     begin
      if compare(getRef(_start)^, obj) = 0 then
        result := _start
       else if compare(getRef(advanceF(_start))^, obj) = 0 then
        result := advanceF(_start)
       else
        result := last;
       break;
     end;
   result := advanceByF(_start, dist);
   comp := compare(getRef(result)^, obj);
   if comp = 0 then
     break
   else if comp < 0 then
     _start := result
   else
     _end := advanceF(result)
 until false;
end;
Переменая dist будет равна 1 при 2 и 3 элементах в контейнере.


 
Erik1 ©   (2005-06-13 19:19) [2]

Я решил, что в библиотеке есть ошибка и переписал алгоритм. :(



Страницы: 1 вся ветка

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.039 c
3-1117443924
Сатир
2005-05-30 13:05
2005.07.11
Генерация SQL-скриптаизменений в базе


4-1111843558
Sashag
2005-03-26 16:25
2005.07.11
Как общаться с capi2032.dll


14-1118513659
Delphi-beginer
2005-06-11 22:14
2005.07.11
Квадратные уравнения.Помогите новечку.


1-1119432901
DelphiN!
2005-06-22 13:35
2005.07.11
Вызов ф-ии в отдельном потоке, с получением результата


8-1110298635
Vladimirs
2005-03-08 19:17
2005.07.11
Как преобразовать пиксель 16бит в 24 бит RGB BMP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский