stable sort? (sort -s)
Assaf Gordon
assafgordon at gmail.com
Tue Aug 22 23:35:47 UTC 2017
Hello,
Does busybox's sort implements a stable sort?
I see it accepts "-s" option,
and I see in the source code that FLAG_s
does disable the last-resort comparison:
https://git.busybox.net/busybox/tree/coreutils/sort.c#n343
However,
It seems the code also uses qsort() which is not stable -
rendering the stable-ness ineffective (IUUC).
I've encountered a case on alpine linux 3.6.2/amd64,
with busybox v1.26.2 (2017-08-03 13:08:12 GMT)
where using "-s" returns mis-ordered results:
$ printf "a X 1\nA X 2\nA x 5\n" | sort -k1,1
A X 2
A x 5
a X 1
$ printf "a X 1\nA X 2\nA x 5\n" | sort -k1,1 -s
A x 5
A X 2
a X 1
Whereas with these give the same result (as they should) with
coreutil's, FreeBSD and OpenBSD's sort.
An alpine developer responded on alpine-user@ mailing list:
"It uses qsort() that is not stable by default. It could have been
made stable by adding line number to the comparison key, however there
is no evidence of any attempt for it."
If this is the case,
perhaps it's worth disabling "-s" - otherwise it can mislead to give
incorrect results?
Thoughts?
regards,
- assaf
More information about the busybox
mailing list