Objectif : Trier efficacement un tableau d'objets en fonction d'une clé, en maintenant la cohérence et la stabilité.
Recommandation d'algorithme : Bien que de nombreux algorithmes de tri existent, pour votre besoin spécifique de stabilité, envisagez d'implémenter une version modifiée d'un algorithme de tri non stable tel que QuickSort ou MergeSort.
Technique de tri stable :
Pour garantir la stabilité, ajoutez un critère supplémentaire à la fonction de comparaison de tri. Plus précisément, lorsque vous comparez deux éléments égaux, utilisez leurs positions d'origine dans le tableau d'entrée comme critère de départage. Cela conservera l'ordre des éléments avec la même clé.
Implémentation JavaScript :
const stableSort = (arr, key, order) => {
// Get initial positions of elements
const positions = arr.map((el, i) => i);
// Sort using modified comparison function
arr.sort((a, b) => {
const keyA = a[key];
const keyB = b[key];
if (keyA === keyB) {
// Fall back to position for stability
return positions[a] - positions[b];
}
return order === "asc" ? keyA - keyB : keyB - keyA;
});
return arr;
};
Exemple d'utilisation :
const arr = [
{ id: 1, value: 4 },
{ id: 2, value: 2 },
{ id: 3, value: 4 },
{ id: 4, value: 3 },
];
const sortedArr = stableSort(arr, "value", "asc");
// Output:
// [
// { id: 2, value: 2 },
// { id: 1, value: 4 },
// { id: 3, value: 4 },
// { id: 4, value: 3 },
// ]
En utilisant cette technique, vous pouvez obtenir un tri stable même à partir d'algorithmes de tri non stables, ce qui le rend adapté à votre scénario d'environ 200 à 300 objets.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3