Objetivo: Ordenar eficientemente una serie de objetos según una clave, manteniendo la coherencia y la estabilidad.
Recomendación de algoritmo: Si bien existen muchos algoritmos de clasificación, para su necesidad específica de estabilidad, considere implementar una versión modificada de un algoritmo de clasificación no estable como QuickSort o MergeSort.
Técnica de clasificación estable:
Para garantizar la estabilidad, agregue un criterio adicional a la función de comparación de clasificación. Específicamente, al comparar dos elementos iguales, use sus posiciones originales en la matriz de entrada como desempate. Esto mantendrá el orden de los elementos con la misma clave.
Implementación de 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;
};
Ejemplo de uso:
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 },
// ]
Al utilizar esta técnica, puede obtener una clasificación estable incluso a partir de algoritmos de clasificación no estables, lo que la hace adecuada para su escenario de aproximadamente 200-300 objetos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3