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

If using CPAN is allowed, see Sort::Packed, this is faster:

# ... use Sort::Packed 'sort_packed'; # ... sort_packed => sub { sort_packed I => my $s = pack 'i*', @input; my @list = unpack 'i*', $s; Compare(\@list,\@output) or die "@list" if DO_CHECK; }, # ...

Edit: As I see now, I omitted copying @input list to unnecessary intermediate @list, as all contestants, it seems, are bound to do. To be fair, either everybody drop that line, or it's inserted into code above. Still, Sort::Packed is faster and scales better. Sorry, didn't measure other monks' answers from last night on. Surprise is counter-intuitive good speed of Discipulus' simple just-push-in-loop solution. + All tricks with sign bit interpretation sacrifice integer range (Veltro++).

  • Comment on Re^2: Fastest way to sort a list of integers into 0,1,2,3,-3,-2,-1
  • Download Code