有什么方法可以通知编译器该数组已排序,从而可以更快地进行搜索?

时间:2018-11-06 00:34:10

标签: arrays swift sorting optimization

想象一下,我有以下两个数组:

let array1 = [1,4,6,9,12,18]
let array2 = [6,9,4,18,12,1]

现在我想找到9的索引

array1.index(of:9) // 3
array2.index(of:9) // 1

无论如何,它会告诉编译器“与array2不同,您需要一个一个地查找所有索引,array1已经排序,因此可以节省时间并执行binarySearch”

可能类似于:

array1.index(of : 9, isSorted : true)
array2.index(of : 9, isSorted : false)

1 个答案:

答案 0 :(得分:1)

不。但是您可以自己实现它。

原则上,Array可以实现为自动管理。它可能有一个isSorted标志,该标志默认情况下是为一个空数组设置的,在违反排序顺序的操作完成时重置,并在调用sort时设置。然后,对于排序后的数据,具有更佳实现的任何函数都可以根据需要检查此标志,并执行优化算法或通用算法。

但是,我怀疑这样的簿记(几乎由所有操作支付)的成本将超过有限的收益(仅由某些操作带来的收益)。