objective-c - 如何对 NSArray 进行二分查找?

标签 objective-c ios algorithm nsarray binary-search

对(已)排序的 NSArray 进行二分查找的最简单方法是什么?

目前我发现的一些潜在方法包括:

  1. CFArrayBSearchValues 的使用(提到 here )- 这对 NSArray 有用吗?

  2. NSArray 的方法 indexOfObject:inSortedRange:options:usingComparator: 假定数组已排序并采用 opts 参数输入 NSBinarySearchingOptions - 这是否意味着它执行二进制搜索? docs就说:

    Returns the index, within a specified range, of an object compared with elements in the array using a given NSComparator block.

  3. 编写我自己的二进制搜索方法(类似于 this 的内容)。

我应该补充一点,我正在为 iOS 4.3+ 编程

提前致谢。

最佳答案

第二种选择绝对是最简单的。 Ole Begemann 有一篇关于如何使用 NSArrayindexOfObject:inSortedRange:options:usingComparator: 方法的博客文章:

NSArray *sortedArray = ... // must be sorted
id searchObject = ...
NSRange searchRange = NSMakeRange(0, [sortedArray count]);
NSUInteger findIndex = [sortedArray indexOfObject:searchObject 
                                inSortedRange:searchRange
                                      options:NSBinarySearchingFirstEqual
                              usingComparator:^(id obj1, id obj2)
                              {
                                  return [obj1 compare:obj2];
                              }];

参见 NSArray Binary Search

关于objective-c - 如何对 NSArray 进行二分查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11198896/

相关文章:

algorithm - 我如何在酒店预订系统中管理日期系统

ios - 在 CGRect 中查找主色的算法不起作用

objective-c - 根据经度和纬度找出日出时间

ios - 尝试将值注入(inject)发布者,但接收到无序值

ios - 无法将已解析的 JSON 列表显示到 TableView 中

c - 加权区间调度问题和动态规划

windows - 测试排序算法的程序

ios - 在 UIViewController 之间传递数据

ios - 无法将没有 cocoa pod 的 Google Analytics iOS SDK 添加到我的项目中

ios - NSMutableDictionary 删除键路径处的对象?