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

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to