RosettaCodeData/Task/Binary-search/FutureBasic/binary-search-2.basic

29 lines
854 B
Plaintext

include "NSLog.incl"
NSInteger local fn BinarySearch( array as CFArrayRef, key as CFTypeRef )
NSInteger lo = 0
include "NSLog.incl"
NSInteger local fn BinarySearch( array as CFArrayRef, key as CFTypeRef, range as CFRange )
if ( range.length == 0 ) then return NSNotFound
NSInteger i = range.location + range.length / 2
CFTypeRef midVal = array[i]
select ( fn NumberCompare( midVal, key ) )
case NSOrderedAscending
return fn BinarySearch( array, key, fn CFRangeMake( i + 1, range.length - i + 1 ) )
case NSOrderedDescending
return fn BinarySearch( array, key, fn CFRangeMake( range.location, i - range.location ) )
end select
end fn = i
void local fn DoIt
CFArrayRef a = @[@1, @3, @4, @5, @6, @7, @8, @9, @10]
NSLog(@"6 is at position %d", fn BinarySearch( a, @6, fn CFRangeMake(0,len(a)) )) // prints 4
end fn
fn DoIt
HandleEvents