Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

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

by hdb (Monsignor)
on Feb 05, 2019 at 17:03 UTC ( #1229420=note: print w/replies, xml ) Need Help??


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

I think your second version will be very slow if there are only negative numbers... ;) My version below is reasonably fast if there is no zero in the input, otherwise it fails:

hdb => sub { my @list = @input; @list = sort{$a*$b>0?$a<=>$b:$b<=>$a} @list; Compare(\@list,\@output) or die "@list" if DO_CHECK; },
  • Comment on Re^2: Fastest way to sort a list of integers into 0,1,2,3,-3,-2,-1
  • Download Code

Replies are listed 'Best First'.
Re^3: Fastest way to sort a list of integers into 0,1,2,3,-3,-2,-1
by Discipulus (Abbot) on Feb 05, 2019 at 20:48 UTC
    Hello hdb

    > version will be very slow if there are only negative numbers... ;)

    eh eh, you are right but the check does not slow it at all..

    Discipulus => sub{ my @list = sort {$a<=>$b} @input; if ($list[0] < 0 and $list[-1] > 0){ push @list, shift @list until $list[0] >= 0; } Compare(\@list,\@output) or die "@list" if DO_CHECK; },

    update: more test cases.. more checks!

    Discipulus4 => q{ # https://www.perlmonks.org/?node_id=1229437 @list = sort {$a<=>$b} @list; if ($list[0] < 0 and $list[-1] >= 0) { push @list, shift @list until $list[0] >= 0 } },
    L*

    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
Re^3: Fastest way to sort a list of integers into 0,1,2,3,-3,-2,-1
by Tux (Canon) on Feb 06, 2019 at 10:58 UTC

    You might not have run this with DO_CHECK *on*, as your lists sort like 1 2 3 4 5 0 -5 -4 -3 -2 -1: Your 0 ends up in the middle instead of at the start.


    Enjoy, Have FUN! H.Merijn

      I did, that's why I said it fails if there is a zero in the data. I am still thinking whether it can be saved in some way without extra checks for zero.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1229420]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (2)
As of 2021-10-21 03:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My first memorable Perl project was:







    Results (82 votes). Check out past polls.

    Notices?