SORU
28 AĞUSTOS 2009, Cuma


Sayıların sıralanmış bir diziye eklemek için etkili bir yolu, bir numara?

JavaScript sıralanmış bir dizi var, ve bu elde edilen dizinin sıralanmış kalır dizi içine bir parça daha eklemek istiyorum. Kesinlikle quicksort tarzı basit bir ekleme işlevi uygulamak olabilir:

var array = [1,2,3,4,5,6,7,8,9];
var element = 3.5;
function insert(element, array) {
  array.splice(locationOf(element, array)   1, 0, element);
  return array;
}

function locationOf(element, array, start, end) {
  start = start || 0;
  end = end || array.length;
  var pivot = parseInt(start   (end - start) / 2, 10);
  if (end-start <= 1 || array[pivot] === element) return pivot;
  if (array[pivot] < element) {
    return locationOf(element, array, pivot, end);
  } else {
    return locationOf(element, array, start, pivot);
  }
}

console.log(insert(element, array));

Ancak Dizinin bu uygulamaları fark ettim.sıralama fonksiyonu potansiyel olarak benim için, ve doğal olarak bu olabilir

var array = [1,2,3,4,5,6,7,8,9];
var element = 3.5;
function insert(element, array) {
  array.push(element);
  array.sort(function(a, b) {
    return a - b;
  });
  return array;
}

console.log(insert(element, array));

İkinci ilk uygulama seçmek için iyi bir neden var mı?

EditNot : bu genel durum, O(log(n)) ekleme (uygulanan ilk örnek) daha hızlı daha genel bir sıralama algoritması; ancak bu mutlaka böyle JavaScript özellikle. Not:

  • En iyi ihtimalle birkaç ekleme algoritmaları O(n), hangi hala önemli ölçüde farklı O(log(n)), ama değil oldukça kötü olarak O(n log(n)) olarak belirtilen aşağıda. Belirli bir sıralama algoritması kullanılır (Javascript Array.sort implementation?)
  • Sıralama yöntemi JavaScript yerel bir işlevi, yani potansiyel fark çok büyük Faydaları -- O(log(n)) ile büyük bir katsayısı hala olmak çok daha kötü O(n) için makul boyutta veri setleri.

CEVAP
19 Kasım 2010, Cuma


Sadece tek bir veri noktası olarak, önceden sıralanmış 100,000 sayıları iki yöntem Windows üzerinde Chrome 7 kullanarak bir diziye 1000 rasgele öğeler ekleme bu test başladı:

First Method:
~54 milliseconds
Second Method:
~57 seconds

Yani, en azından bu Kur, yerel yöntemi telafi etmiyor. Bu bile küçük veri setleri için doğru, 1000 dizisine 100 öğeleri ekleme

First Method:
1 milliseconds
Second Method:
34 milliseconds

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • André Frizzo

    André Frizz

    16 Aralık 2006
  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006