Objetivo: Classifique com eficiência uma matriz de objetos com base em uma chave, mantendo a consistência e a estabilidade.
Recomendação de algoritmo: Embora existam muitos algoritmos de classificação, para sua necessidade específica de estabilidade, considere implementar uma versão modificada de um algoritmo de classificação não estável, como QuickSort ou MergeSort.
Técnica de classificação estável:
Para garantir a estabilidade, adicione um critério adicional à função de comparação de classificação. Especificamente, ao comparar dois elementos iguais, use suas posições originais na matriz de entrada como desempate. Isso manterá a ordem dos elementos com a mesma chave.
Implementação 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;
};
Exemplo 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 },
// ]
Ao usar esta técnica, você pode obter classificação estável mesmo a partir de algoritmos de classificação não estáveis, tornando-a adequada para seu cenário de cerca de 200-300 objetos.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3