如果我有一个包含1000个元素的整数数组,那么找到特定元素索引的最快方法是什么?最好首先使用QuickSort然后使用BinarySearch或仅使用普通的LinearSearch吗?
另外,如果我有100 000个元素甚至只有100个元素,那么最快的方法会不同吗?
谢谢!
答案 0 :(得分:4)
线性搜索会更好。线性搜索的O(N)
最差情况小于单独的快速排序(平均O(nlog n)
,但最差情况O(N^2)
)和则需要添加二进制搜索( O(log N)
)。如果您需要多次搜索(如果您可以分摊排序成本,那么二分搜索比线性搜索更有效),排序和使用二进制搜索会更好。
答案 1 :(得分:3)
正如其他答案所说,如果您只想找到列表中的一个成员,线性搜索会更好。但是如果你想找到同一个列表中的许多成员,那么你最好先对它进行一次排序,然后做很多二进制搜索。
答案 2 :(得分:1)
在最好的情况下,快速排序计算开销是O(n log(n)),在最坏的情况下是O(n ^ 2),二进制搜索是O(log(n))所以在最坏的情况下它们一起采取为O(n ^ 2)。
无需提及线性搜索需要O(n)
所以这取决于您的操作数量和输入大小。你可以在两种最坏的情况下乘以你的平均搜索时间(k W(n),其中k是搜索次数,n是数组的大小,W(n)是每种方法的最坏情况),然后决定什么要做。
答案 3 :(得分:1)
使用线性搜索更快,因为与单独快速排序所消耗的O(n)
时间相比,它将花费O(nlogn)
。但是,为了在大量元素的情况下改善其时间,尝试创建多个数组块并并行运行搜索算法。有关这方面的更多信息,请查看PPL(Stl库)。
答案 4 :(得分:1)
线性搜索会将每个项目与另一个项目进行比较,以找到相应的索引。
快速排序将首先将每个项目与数据透镜进行比较,以便执行第一个分区步骤。之后还有更多的操作。
快速排序的第一步已经花费了整个线性搜索所需的时间,因此至少与线性搜索一样长。对于不同的列表大小,这将是相同的。