क्या कोई अंतर्निहित जावास्क्रिप्ट फ़ंक्शन partial sort करने के लिए है? यदि नहीं, तो इसे लागू करने का एक अच्छा तरीका क्या है?जावास्क्रिप्ट में आंशिक प्रकार
एन तत्वों की एक अवर्गीकृत सरणी देखते हुए, मैं कश्मीर तत्वों है कि कुछ भार समारोह के संबंध में कम से कम कर रहे हैं करना चाहते हैं। केएन से बहुत छोटा है, इसलिए यह पूरे सरणी को सॉर्ट करने और पहले के तत्वों को लेने में अक्षम होगा।
मैं कुछ भी गैर-मानक, ब्राउज़र-निर्भर होने पर भी खुश रहूंगा। मैं अभी भी कस्टम जावास्क्रिप्ट कार्यान्वयन में फॉलबैक कर सकता था।
पुनश्च: यह (खाते में एक भार समारोह लेने के लिए, बस के रूप में वे सादगी के लिए कर रहे हैं तत्वों छँटाई के बिना) मेरे वर्तमान कस्टम दिया गया है: एक ही समय दिया सरणी के माध्यम से
function bisect(items, x, lo, hi) {
var mid;
if (typeof(lo) == 'undefined') lo = 0;
if (typeof(hi) == 'undefined') hi = items.length;
while (lo < hi) {
mid = Math.floor((lo + hi)/2);
if (x < items[mid]) hi = mid;
else lo = mid + 1;
}
return lo;
}
function insort(items, x) {
items.splice(bisect(items, x), 0, x);
}
function partialSort(items, k) {
var smallest = [];
for (var i = 0, len = items.length; i < len; ++i) {
var item = items[i];
if (smallest.length < k || item < smallest[smallest.length - 1]) {
insort(smallest, item);
if (smallest.length > k)
smallest.splice(k, 1);
}
}
return smallest;
}
console.log(partialSort([5, 4, 3, 2, 1, 6, 7, 8, 1, 9], 3));
एल्गोरिथ्म चलता है, नए तत्वों को सम्मिलित करने के लिए बाइनरी खोज का उपयोग करके के अब तक की सबसे छोटी वस्तुओं की क्रमबद्ध सूची का ट्रैक रखना।
यदि आप सोचते हैं कि वे तेज़ या अधिक सुरुचिपूर्ण हो सकते हैं तो कृपया वैकल्पिक समाधान पोस्ट करें। समय बहुत स्वागत है।
मुझे स्पष्ट नहीं है कि के कैसे काम करता है। उदाहरण के लिए, क्या आप शीर्ष 20% की तलाश में हैं? –
नहीं, यह स्थिर है, आमतौर पर * के * = 5, जबकि * एन * कई हजार हो सकता है। –
तो, उदाहरण के लिए, आपके पास स्कोर के साथ हजारों प्रतियोगियों हैं, और आप जानना चाहते हैं कि शीर्ष 5 स्कोर किसके पास हैं? –