javascript - 排序数组和 indexOf() 运行时

标签 javascript arrays performance ecmascript-6 ecmascript-5

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

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

注意事项:

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

“最大的值(value)”实际上是最流行的搜索关键字,它是一个字符串。

最佳答案

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

当然这取决于你的数据对象: 数组列表:

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 也可以帮助您一直订购。

最后我会说:“取决于您的数据容器以及排序或搜索的实现方式以及整个过程中需要性能的地方”。

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

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

关于javascript - 排序数组和 indexOf() 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43265292/

相关文章:

java - 使用堆栈的数组实现查找多数(领导者)

javascript - 生成显示网站中所有文件之间关系的图表或架构

javascript - 什么 VsCode 主题可以在 html 属性上启用漂亮的手写字体?

php - 如何在页面重新加载时保留 jqGrid 中的页码和排序标准?

c++ - 如何在不知道大小的情况下读取文本文件并存储到数组中?

c++ - 数组 C++ 中的增量运算符

php - MySQL 比较和删除大表~30m 记录

android - Jetplayer 与 soundPool?

python - 增长 numpy 数值数组的最快方法

javascript - 使用样式组件将数组渲染为行