Thread sort, ne und merkwürdiges Verhalten (5 answers)
Opened by Wastl at 2014-11-04 21:18

Linuxer
 2014-11-04 22:18
#178116 #178116
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Ohne mich je mit einem Sort-Algorithmus in der Tiefe auseinander gesetzt zu haben, behaupte ich:

Dein merkwürdiges Verhalten beruht darauf, dass Du den Vergleich auf Ungleichheit machst:

perldoc perlop
...
Binary "<=>" returns -1, 0, or 1 depending on whether the left argument is numerically less than, equal to, or greater than the right argument. If your platform supports NaNs (not-a-numbers) as numeric values, using them with "<=>" returns undef. NaN is not "<", "==", ">", "<=" or ">=" anything (even NaN), so those 5 return false. NaN != NaN returns true, as does NaN != anything else. If your platform doesn't support NaNs then NaN is just a string with numeric value 0

...

Binary "ne" returns true if the left argument is stringwise not equal to the right argument.

Binary "cmp" returns -1, 0, or 1 depending on whether the left argument is stringwise less than, equal to, or greater than the right argument.


Mit ne fehlt schon mal der "-1" Zweig. Wenn die verglichenen Buchstaben gleich sind, ergibt ne FALSE, also 0. Wenn sie ungleich sind, TRUE, bzw. 1. Dementsprechend verarbeitet sort das dann.

Betrachten wir das Wort 'eva';

'e' wird mit 'v' verglichen; Ungleich == 1 => e wird als größer betrachtet und "nach hinten geschoben";
'v' wird mit 'a' verglichen; Ungleich == 1 => v wird als größer betrachtet und "nach hinten geschoben";
'a' bleibt übrig und bleibt stehen; so wird aus 'eva' 'ave';

Das gleiche kannst Du beobachten, wenn Du eine Liste von Zahlen mit Ungleichheit sortierst:

Code (perl): (dl )
1
2
3
@list = 1 .. 4;
print sort { $a != $b } @list;
# == 4321
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread sort, ne und merkwürdiges Verhalten