Shuffled input is important
Yes, good catch! The GRT makes each comparison faster, but it seems like the number of comparisons is far lower for already sorted or nearly sorted input. It looks like the pack method is better no matter what because with this (and a list from -50 to 250):
vr_map => sub { # https://www.perlmonks.org/?node_id=1229415 my @list = @input; @list = unpack 'i*', pack 'I*', sort { $a <=> $b } map { ~$_ } @list; # Doesn't even give the cor +rect answer, there's an offset of 1 Compare(\@list,\@output) or die "@list" if DO_CHECK; },
your implementation is still noticeably faster (my version falls behind pretty fast on a non-sorted list):
Rate Eily vr_map grepfirst sortfirst vr Eily 5208/s -- -53% -64% -67% -71% vr_map 11021/s 112% -- -25% -31% -38% grepfirst 14623/s 181% 33% -- -8% -17% sortfirst 15977/s 207% 45% 9% -- -10% vr 17701/s 240% 61% 21% 11% --


In reply to Re^2: Fastest way to sort a list of integers into 0,1,2,3,-3,-2,-1 by Eily
in thread Fastest way to sort a list of integers into 0,1,2,3,-3,-2,-1 by haukex

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.