IOS查找算法之二分查找
注意点:1)数组,2)有序,3)太大和太小都不行
- (NSInteger)gly_bsearchWithLoop:(NSString *)propertyName value:(double)value
{
NSInteger low = 0;
NSInteger high = self.count - 1;
while (low <= high)
{
//为什么不写(low + high) / 2,是因为如果 low 和 high 比较大的话,两者之和就有可能会溢出。
NSInteger mid = low + ((high - low) >> 1);
double middleNumber = [[self[mid] valueForKey:propertyName] doubleValue];
if ([@(middleNumber) compare:@(value)] == NSOrderedSame)
{
return mid;
}
else if ([@(middleNumber) compare:@(value)] == NSOrderedAscending)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
return -1;
}