Ziel: Ein Array von Objekten basierend auf einem Schlüssel effizient sortieren und dabei Konsistenz und Stabilität wahren.
Algorithmus-Empfehlung: Obwohl es viele Sortieralgorithmen gibt, sollten Sie für Ihren spezifischen Stabilitätsbedarf die Implementierung einer modifizierten Version eines instabilen Sortieralgorithmus wie QuickSort oder MergeSort in Betracht ziehen.
Stabile Sortiertechnik:
Um Stabilität zu gewährleisten, fügen Sie der Sortiervergleichsfunktion ein zusätzliches Kriterium hinzu. Insbesondere beim Vergleich zweier gleicher Elemente verwenden Sie deren ursprüngliche Positionen im Eingabearray als Tiebreaker. Dadurch wird die Reihenfolge der Elemente mit demselben Schlüssel beibehalten.
JavaScript-Implementierung:
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;
};
Beispielverwendung:
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 },
// ]
Mit dieser Technik können Sie auch bei instabilen Sortieralgorithmen eine stabile Sortierung erzielen, sodass sie für Ihr Szenario mit etwa 200–300 Objekten geeignet ist.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3