Orden parcial en JavaScript

¿Hay alguna función incorporada de JavaScript para hacer unaordenamiento parcial? Si no, ¿cuál es una buena manera de implementarlo?

Dada una variedad sin clasificar deN Elementos, me gustaría encontrarK Elementos que son mínimos con respecto a alguna función de ponderación.K es mucho más pequeño queN, por lo que sería ineficiente ordenar toda la matriz y tomar la primeraK elementos.

Estaría feliz incluso si hubiera algo no estándar, dependiente del navegador. Todavía podría recurrir a la implementación personalizada de JavaScript.

PD: Esta es mi implementación personalizada actual (sin tener en cuenta una función de ponderación, solo clasificando los elementos como son para simplificar):

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));

El algoritmo recorre la matriz dada una sola vez, manteniendo un registro de una lista ordenada dek Artículos más pequeños hasta el momento, utilizando la búsqueda binaria para insertar nuevos elementos.

Por favor, publique soluciones alternativas si cree que podrían ser más rápidas o más elegantes. Los horarios son muy bienvenidos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta