我有一个数字列表,我需要找到其中最小的n个。寻找数组中n个最小数字的最快方法是什么?
这是我到目前为止,但我敢肯定,它必须能够做得更快和更清洁的(也许无需先排序整个列表):
var list = [56,34,27,4,78,12,89,1002,45,33,87,90];
var results = [];
var sorted_list = list.slice(); // fastest way to duplicate array
sorted_list.sort(function (a, b) {
return a - b;
});
for (var i = 0; i < n; i++) {
// do stuff with sorted_list[i] and list
// push the result to results
}
return results;
如果你愿意跑n次以上所有元素foreach循环,就可以避免排序,是的。 – MightyPork
我建议您查看JavaScript本地库。如:https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min – mvidaurre
这是一个标准问题,称为分区,但由于某种原因,维基百科称之为[Quickselect](http://en.wikipedia.org /维基/ Quickselect)。一旦找到第n个最小的数字,分区算法会将所有(n-1)个较小的数字放在其左边。请注意,这些数字本身不会被排序。 –