J'ai une triés tableau JavaScript, et souhaitez insérer un élément de plus dans le tableau tel que le tableau qui en résulte reste triés. Je pourrais certainement de mettre en œuvre un simple quicksort style d'insertion de la fonction:
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));
Cependant, j'ai remarqué que les implémentations de la Matrice.fonction de tri peut-être de faire cela pour moi, et nativement:
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));
Est-il une bonne raison de choisir la première mise en œuvre au cours de la seconde?
Edit: à Noter que pour le cas général, un O(log(n)) insertion (tel que mis en œuvre dans le premier exemple) sera plus rapide qu'un générique algorithme de tri; toutefois, ce n'est pas forcément le cas de JavaScript en particulier. Notez que:
- Dans le meilleur des cas pour plusieurs d'insertion des algorithmes est O(n), qui est encore nettement différent de O(log(n)), mais pas tout à fait aussi mauvais que O(n log(n)) comme indiqué ci-dessous. Il allait descendre pour le particulier algorithme de tri utilisé (voir Tableau Javascript.trier la mise en œuvre?)
- La méthode de tri en JavaScript est une fonction native, donc potentiellement de réaliser d'énormes avantages -- O(log(n)) avec un grand coefficient peut être encore pire que O(n) de taille raisonnable, des ensembles de données.