是否有一个现成的JavaScript库或内置函数,类似于numpy.partition
?
看起来像underscore.js这样的流行库都没有提供这样的功能。我想知道是否能找到一个通用情况下能够找到数组中前n
个最大(或最小)元素的函数,而不必自己实现quickselect或introselect。
n
处对数组进行分区会重新排列数组,以使得索引为n
的元素按排序顺序排列,并且所有大于n
的索引处的元素都比n
处的元素大。或者,小于n
的索引处的元素都可以小于n
处的元素。无论哪种方式,它都是一个部分排序,保证了特定元素的位置以及上下元素的分布。当然,完全排序也满足相同的条件,但运行时间为
O(n log n)
,而分区通常运行时间为O(n)
(快速选择的平均情况,introselect的最坏情况)。jQuery插件QuickSelect执行完全不同的操作,尽管名称很有前途。
这个问题的部分动机:可能使用Math.min从数组中获取第二个最小的数字吗?