![]() |
AW: Pointer-Problem
TList.Sort ruft intern einen Quicksort aufruft und der braucht (wie eigentlich jeder Sort) eine stabile Vergleichsmethode über die gesamte Datenmenge. D.h. wenn A < B und B < C ist, dann muss auch A < C sein. Mit dem Random im Comparer ist das aber nicht garantiert.
Du kannst natürlich das Random vor dem Sort verwenden um eine gewisse Zufälligkeit zu erreichen. Während des Sorts sind Zufälle aber nicht erlaubt. |
AW: Pointer-Problem
Wiki mein Quicksort sei ein "nicht-stabiler Sortieralgorithmus".
Somit hast du deinen Zufall sowieso schon automatisch integriert. :angle2: stabil = gleich Werte bleiben in der Reihenfolge, wie sie vor der Sortierung schon war. |
AW: Pointer-Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Ok, dank an alle. Ich habe jetzt eine funktionierende Lösung.
@himi Wenn alle Einträge den gleichen Rang haben (Result = 0 ist), dann war in meinem Versuch der erste und letzte Eintrag (sowie ein weiteres Item) immer an der gleichen Stelle. Die anderen Positionen wechselten. Das reichte mir nicht zum Verwürfeln der Reihenfolge, da ich das zum Losen von Spielern brauche. Ich hatte gedacht/gehofft, dass Sort so eine Zufallsmanipulation schon irgendwie toleriert. Ist halt dann nicht so - gut zu wissen. "Nicht stabil" würde ich daher eher so interpretieren, dass eine bestimmte Reihenfolge nicht gesichert ist (aber auch keine zufällige Umsortierung erfolgt). |
AW: Pointer-Problem
Zitat:
Die Sortierung ist ja trotzdem deterministisch und nur von der Eingabe abhängig (nicht noch von irgendwelchen anderen (pseudo-)zufälligen Bedingungen). |
AW: Pointer-Problem
Darum hab ich auch nur die Erklärung für "stabil" geschrieben.
Für "nicht stabil" gibt es keine definierte Reihenfolge/Erklärung, abgesehn von dem "nicht". Für deinen Fall gibt es zwei/drei Lösungen. - vor dem Sortieren bei allen Elementen einen Zufallswert hinterlegen, welcher im Gleichheitsfall genommen wird (somit ändert sich dieses nicht mehr, wärend des sortierens) - wärend des Sortierens jedem Element einen Zufallswert verpassen, aber diesen speichern, damit bei der nächsten Abfrage des elementes sein Zufallswert sich nicht ändert (hier brauch man auch nur den Elementen etwas zurodnen und speichern, welche mal mit Gleichheit aufgefallen sind) - vorher einmal gut durchmischen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz