Swift:标准数组的二进制搜索?

我有一个排序数组,想对它进行二进制搜索

所以我想问的是,Swift库中是否已经提供了排序等功能。?或者是否有独立于类型的版本可用

当然,我可以自己写,但我喜欢避免重新发明轮子

下面是我最喜欢的二进制搜索实现。它不仅对查找元素很有用,而且对查找插入索引也很有用。通过提供相应的谓词(例如,{$0<x}vs{$0>x}vs{$0>x}vs{$0<=x}vs{$0>=x}),可以控制有关假定排序顺序(升序或降序)和相等元素行为的详细信息。评论毫不含糊地说它到底做了什么

扩展随机访问集合{
///查找这样的索引N,该谓词对于到的所有元素都为true
///但不包括索引N,并且对于所有元素都为false
///从索引N开始。
///如果没有这样的N,则行为是未定义的。
func二进制搜索(谓词:(元素)->Bool)->索引{
var低=起始指数
var high=endIndex
低的时候!=高的时候{
让中间=索引(低,偏移:距离(从:低,到:高)/2)
if谓词(self[mid]){
低=指数(后:中)
}否则{
高=中
}
}
低回报
}
}

用法示例:

(0..<778).二进制搜索{$0<145}//145

发表评论