Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 搜索前三名数字的最快、最有效的方法?_Java_Android_Arrays_List_Collections - Fatal编程技术网

Java 搜索前三名数字的最快、最有效的方法?

Java 搜索前三名数字的最快、最有效的方法?,java,android,arrays,list,collections,Java,Android,Arrays,List,Collections,我现在有一个大约8-10个数字的数组,它们会定期变化 因此,大约每5-10秒更新一次数据 我需要每10秒获取阵列中的前3个数字 这一切都是在移动设备上完成的 该阵列是当前扫描的接入点的RSSI,因此在我的办公室,它通常在10个左右,但在现场测试中,它可能会增加到50个左右 在这一分钟,我在数组中迭代了3次,每次我取出三个最高的数字,并将它们放在三个先前声明的变量中 我的问题是,在这种情况下,我应该采取什么措施来提高速度和效率?数字只有10-什么都不做。它已经足够有效了 如果大小增加,您可以使用存

我现在有一个大约8-10个数字的数组,它们会定期变化

因此,大约每5-10秒更新一次数据

我需要每10秒获取阵列中的前3个数字

这一切都是在移动设备上完成的

该阵列是当前扫描的接入点的RSSI,因此在我的办公室,它通常在10个左右,但在现场测试中,它可能会增加到50个左右

在这一分钟,我在数组中迭代了3次,每次我取出三个最高的数字,并将它们放在三个先前声明的变量中


我的问题是,在这种情况下,我应该采取什么措施来提高速度和效率?

数字只有10-什么都不做。它已经足够有效了


如果大小增加,您可以使用存储号码。

为什么不使用Array.sort方法呢?据我所知,该方法在引擎盖下使用

保罗


编辑:验证它使用了一个

您的算法已经是O(n),快速排序是>O(n log n),所以这肯定不是实现的方法。如果使用树结构,例如AVL tree,则可以将速度提高到O(对数n)。
仅对于阵列,您当前的算法是最快的方法。

您当前的算法需要3*n比较。您可以执行插入排序的一种变体来改进:

  • 将输入数组的前3项放入输出数组,对它们进行排序
  • 遍历输入数组的其余项,
  • 将每个项目放入输出数组的正确位置
  • 将输出数组修剪为3项

  • 这需要2*n的比较。(不过,我不确定这是否值得付出额外的复杂性。)

    我认为在一般情况下,您应该使用基于快速排序的QuickSelect算法,并在时间上O(n)内联修改数组并对其进行“准排序”


    如果您的数组是[1..10]且未排序,则通过调用QuickSelect(A,7)可以询问“排序数组中应位于第七位的数字是哪一个?”,这与说“此特定数组中第三个较大的数字是哪一个”相同。现在最棒的是QuickSelect确保了在这次通话后,我的问题是——你的解决方案是慢下来还是更学术化?我们说的是每10秒约30次迭代……不,不是太慢,更学术。请在此背景下定义“高效”的含义。任何比当前实现更快的方法我建议用谷歌搜索“过早优化是万恶之源”谢谢,这更像是一个学术问题,我还应该声明数组可能会增加,现在编辑这个问题。但是更新AVL树不会比O(n)更昂贵吗?