二分查找(也叫折半查找),速度快,比较次数少是至今应用比较多的一种搜索算法。
下面提供一个方法可以方便调用:
- (NSInteger)searchObject:(id)obj inArray:(NSArray *)sortArray
{
//二分法查找
NSRange searchRange = NSMakeRange(0, [sortArray count]);
NSInteger findIndx = [sortArray indexOfObject:obj inSortedRange:searchRange options:NSBinarySearchingLastEqual usingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return [obj1 compare:obj2];
}];
return findIndx;
}
调用:
//二分法查找元素
NSArray *numberArray = @[@1, @3, @27, @36, @42, @70, @82];
[self searchObject:@36 inArray:numberArray];
注意需要查找的对象和数据源类型一致。
打印结果:
2016-11-30 16:12:06.434 CodeTechnique[59596:446054] 3