Sorting algorithms/Quicksort: Difference between revisions

Content added Content deleted
imported>Rcmlz
imported>Rcmlz
Line 8,228: Line 8,228:
=={{header|Raku}}==
=={{header|Raku}}==
<syntaxhighlight lang="raku" line>
<syntaxhighlight lang="raku" line>
#| Recursive, quicksort implementation
#| Recursive, single-thread, single-pass, quicksort implementation
multi quicksort(@unsorted where @unsorted.elems < 2) { @unsorted }
multi quicksort(@unsorted where @unsorted.elems < 2) { @unsorted }
multi quicksort(@unsorted) {
multi quicksort(@unsorted) {
my $pivot = @unsorted.pick;
my $pivot = @unsorted.pick;
my %class{Order} is default([]);
my %class{Order} is default([]) = @unsorted.classify: * cmp $pivot;
|samewith(%class{Less}), |%class{Same}, |samewith(%class{More})
%class = @unsorted.classify: * cmp $pivot;
|quicksort(%class{Less}), |%class{Same}, |quicksort(%class{More})
}
}
</syntaxhighlight>
</syntaxhighlight>
Line 8,241: Line 8,240:


<syntaxhighlight lang="raku" line>
<syntaxhighlight lang="raku" line>
#| 7-Line, recursive, parallel, quicksort implementation
#| 7-Line, recursive, parallel, single-pass, quicksort implementation
multi seven-line-quicksort-parallel(@unsorted where @unsorted.elems < 2) { @unsorted }
multi seven-line-quicksort-parallel(@unsorted where @unsorted.elems < 2) { @unsorted }
multi seven-line-quicksort-parallel(@unsorted) {
multi seven-line-quicksort-parallel(@unsorted) {
Line 8,257: Line 8,256:
constant $BATCH-SIZE = 2**10;
constant $BATCH-SIZE = 2**10;
my atomicint $worker = $*KERNEL.cpu-cores;
my atomicint $worker = $*KERNEL.cpu-cores;
#| Recursive, parallel, tuned, single-pass, quicksort implementation
proto quicksort-parallel(| --> Positional) {*}
proto quicksort-parallel(| --> Positional) {*}
multi quicksort-parallel(@unsorted where @unsorted.elems < 2) { @unsorted }
multi quicksort-parallel(@unsorted where @unsorted.elems < 2) { @unsorted }