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
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
Bir nesneyi klonlamak için en etkili y...
JQuery ile bir dizi seçmek için bir se...
HTML elemanları jQuery kullanarak oluş...
Şamandıra ve çift karşılaştırma için e...
Dış kavanoz (/*lib.eklemek için doğru ...