我有一個數字列表,我需要找到其中最小的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)個較小的數字放在其左邊。請注意,這些數字本身不會被排序。 –