Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : qsort (vom gcc) scheint nicht korrekt zu sortieren ...



nobody0
14-01-2005, 09:45
... denn nach qsort werden in dem array noch unmitelbar benachbarte Elemente gefunden, die während des qsorts nie miteinander verglichen wurden!

Ich habe dieses Problem immer noch mit dupmerge (Anhang), bei der im normal mode die übergebenen Dateien sortiert werden und Dateien gleichen Inhalts hart gelinkt werden (sofern nicht schon verlinkt). Dabei ändert das Linken die Reihenfolge nicht.
Dabei wird von der Vergleichsfunktion die jüngere mit der älteren hart verlinkt um Platz zu sparen.
Hierbei wird nach 0: size 1: device, 2: content und 4: name sortiert, so dass das Linken nichts hieran (die Reihenfolge) ändert.

Trotzdem ist beispielsweise bei den coreutil-Sourcen ein zweiter Durchlauf nötig, der alle unmittelbar benachbarten Elemente vergleicht und die gleichen linkt.
Im Inverse Mode, der alle hard links expandiert, ist dies übrigens nicht der Fall, obwohl der ebenfalls ganz eindeutig nach 0: size, 1: device, 2: content und 3: inode sortiert.

Also entweder ist qsort vom gcc buggy oder er schafft es auf magische Art und Weise Elemente korrekt einzusortieren und dabei ein einzusortierendes Element mit nur einem nächsten Nachbarn zu vergleichen (was theoretisch nicht geht beim allgemeinen Sortieren) oder ich muß irgendwas übersehen haben.

Irgendwelche Vorschläge? :confused:

nobody0
21-01-2005, 23:14
Also des Rätsels Lösung ist, daß GNU-qsort teilweise quicksort verwendet und das cacht die Reihenfolge der Teil-Folgen, so dass nicht jedes einzusortierende Element mit seinen Nachbarn verglichen wird. Beim Mergesort passiert das nicht, aber das GNU-qsort arbeitet mit Quicksort anstatt Mergesort.