我最近学过二进制搜索....我对它的时间复杂度O(log n)印象深刻,但我怀疑为了获得排序数组我必须要应用排序操作即最小化O(nlogn)复杂性更多。
答案 0 :(得分:0)
如果您有一个未排序(或不保证排序)的列表,则可以选择线性搜索。线性搜索是O(n),而排序是O(nlog n),这更糟糕。即使检查列表是否已排序,也是O(n)。
如果您只想搜索列表一次,则最好使用线性搜索。如果您要多次搜索,您可能会首先对列表进行排序。为了找出最适合您具体案例的内容,您必须分析问题。
答案 1 :(得分:0)
这个想法是你对列表进行一次排序,并保留结果。后续搜索是O(log n)。因此,您在许多搜索中的复杂度为(n log n) + S*log(n)
,其中S
是您要进行的搜索次数。如果您不对数组进行排序,那么您的多次搜索费用为O(S*n)
。