排序数组和 indexOf() 运行时

Sorting an array and indexOf() runtime

假设 array.indexOf() 从数组的开头进行线性搜索是否安全?

所以如果我经常搜索最大值,在调用 indexOf 之前对数组进行排序是否会使它 运行 更快?

备注:

我只想排序一次,搜索多次。

"biggest value"实际上是最流行的搜索关键字,它是一个字符串。

是的,indexOf 是从第一个开始到最后一个。根据排序算法的性能,在询问第一个条目之前对其进行排序会在性能上有所不同。通常,快速排序中的 O(N log N) 到线性搜索中的 O(n)。我建议您使用随机值计数对其进行简单测试,看看性能如何表现。

当然要看你的DataObject: 数组列表:

public int indexOf(Object o) {
    if (o == null) {
        for (int i = 0; i < size; i++)
            if (elementData[i]==null)
                return i;
    } else {
        for (int i = 0; i < size; i++)
            if (o.equals(elementData[i]))
                return i;
    }
    return -1;
}

也许 TreeSet 也可以帮助您一直订购。

最后我想说:"Depends on your data-container and how the ordering or search is implemented and where the performance in the whole process is needed"。

正如评论所说,对于纯数组,您可以制作 binarySearch,它具有与快速排序相同的性能影响。

所以最后不仅仅是算法性能的问题,还有你在什么时候需要过程中的性能。例如,如果您有很多时间添加值而没有时间获取所需的值,则排序结构可以很好地改进它,例如 Tree-Collections。如果您需要通过添加东西来提高性能,则可能相反。