Help for this page

Select Code to Download


  1. or download this
    sub mergesort
      {
    ...
      my @high = mergesort( @_[$#_ / 2 + 1 .. $#_] );
      map !@high || @low && $low[0] <= $high[0] ? shift @low : shift @high
    +, 1..@_;
      }
    
  2. or download this
    sub sqs # stable quicksort
      {
    ...
      my $p = $_[@_ / 2];     # pivot
      sqs( grep $_ < $p, @_ ), grep( $_ == $p, @_ ), sqs( grep $_ > $p, @_
    + );
      }
    
  3. or download this
    sub spsqs # single pass stable quicksort
      {
    ...
      push $items[$_ <=> $pivot]->@*, $_ for @_;
      spsqs($items[-1]->@*), $items[0]->@*, spsqs($items[1]->@*)
      }