function FoundByBinarySearch ( LowIdx, HighIdx : LongInt; var Result : LongInt; const GoalIs : CompareFunc; var Data; var Goal ) : Boolean; var CompVal : CompareResults; begin FoundByBinarySearch := FALSE; if HighIdx < LowIdx then Exit; Result := LowIdx + ((HighIdx-LowIdx) div 2); CompVal := GoalIs(Result, Data, Goal); if CompVal = BinEqual then FoundByBinarySearch := TRUE else if (LowIdx < HighIdx) then begin if CompVal = BinLess then HighIdx := Result-1 else {CompVal = BinGreater} LowIdx := Result+1; FoundByBinarySearch := FoundByBinarySearch( LowIdx, HighIdx, Result, GoalIs, Data, Goal) end else if (CompVal = BinLess) then Dec(Result) end; { function FoundByBinarySearch } |
[000406]