std:find() 排序与未排序

std:find() for sorted vs unsorted

考虑两个整数向量 v1v2,其中 v1 已排序,而 v2 未排序。使用 find() 在这两个向量中搜索元素的时间复杂度是多少?

std::find() performs linear search,即逐个元素查找,直到找到要查找的值。无论集合是否排序,它都是线性的。

如果您有一个已排序的向量,您可能需要考虑改为执行 binary search with std::lower_bound()。这将是向量大小的对数。

std::find 的时间复杂度永远是线性 O(n),因为它不知道 std::vector。它必须将向量视为 non-sorted 并对所有元素执行线性搜索。

然而,real-time可能视情况而定。排序可能会有所帮助,因为 std::find 可以更快结束。这取决于你在寻找什么。假设您要在 non-sorted 数组 (5,1,3,4,2) 中查找 2 - 您必须比较所有元素。但是对于排序的 (1,2,3,4,5) - 你只比较两个元素并找到 2.