sub quicksort {
return @_ unless @_ > 1;
my $pivot = shift;
return (
quicksort( grep $_ < $pivot, @_ ),
$pivot,
quicksort( grep $_ >= $pivot, @_ ),
);
}
####
sub quicksort_t {
return @_ unless @_ > 1;
my $pivot = shift;
## partition the data into 2 parts and run the standard recursive algorithm
## on those two partitions in separate threads; return combined (joined) results
my $t1 = asyncl sub{ quicksort( grep $_ < $pivot, @_ ) }, @_;
my $t2 = asyncl sub{ quicksort( grep $_ >= $pivot, @_ ) }, @_;
return ( $t1->join, $pivot, $t2->join );
}
####
sub _quicksort_t {
return @_ unless @_ > 1;
my $pivot = shift;
## partition the data into 2 parts and run the standard recursive algorithm
## on those two partitions in separate threads; return combined (joined) results
my $t1 = asyncl sub{ quicksort( grep $_ < $pivot, @_ ) }, @_;
my $t2 = asyncl sub{ quicksort( grep $_ >= $pivot, @_ ) }, @_;
return ( $t1->join, $pivot, $t2->join );
}
sub quicksort_t {
return @_ unless @_ > 1;
my $pivot = shift;
## Partition and thread to a thread helper function
my $t1 = asyncl sub{ _quicksort_t( grep $_ < $pivot, @_ ) }, @_;
my $t2 = asyncl sub{ _quicksort_t( grep $_ >= $pivot, @_ ) }, @_;
return ( $t1->join, $pivot, $t2->join );
}