Sorting Algorithms/Circle Sort: Difference between revisions
Rename Perl 6 -> Raku, alphabetize, minor clean-up
m (removed nowiki) |
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
||
Line 323:
sample /sample sort .sample</lang>
=={{header|Fortran}}==
<lang fortran>
Line 793 ⟶ 794:
{{out}}
<pre>1 2 3 4 5 6 7 8 9</pre>
=={{header|Nim}}==
<lang nim>proc innerCircleSort[T](a: var openArray[T], lo, hi, swaps: int): int =
Line 1,045 ⟶ 1,047:
-99 -81 -78 -64 -29 -7 -1 16 20 25 26 35 36 39 46 59 76 85 88 100
-99 -81 -78 -64 -29 -7 -1 16 20 25 26 35 36 39 46 59 76 85 88 100</pre>
=={{header|Perl 6}}==▼
The given algorithm can be simplified in several ways. There's no need to compute the midpoint, since the hi/lo will end up there. The extra swap conditional can be eliminated by incrementing hi at the correct moment inside the loop. There's no need to▼
pass accumulated swaps down the call stack.▼
This does generic comparisons, so it works on any ordered type, including numbers or strings.▼
<lang perl6>sub circlesort (@x, $beg, $end) {▼
my $swaps = 0;▼
if $beg < $end {▼
my ($lo, $hi) = $beg, $end;▼
repeat {▼
if @x[$lo] after @x[$hi] {▼
@x[$lo,$hi] .= reverse;▼
++$swaps;▼
}▼
++$hi if --$hi == ++$lo▼
} while $lo < $hi;▼
$swaps += circlesort(@x, $beg, $hi);▼
$swaps += circlesort(@x, $lo, $end);▼
}▼
$swaps;▼
}▼
say my @x = (-100..100).roll(20);▼
say @x while circlesort(@x, 0, @x.end);▼
say @x = <The quick brown fox jumps over the lazy dog.>;▼
say @x while circlesort(@x, 0, @x.end);</lang>▼
{{out}}▼
<pre>16 35 -64 -29 46 36 -1 -99 20 100 59 26 76 -78 39 85 -7 -81 25 88▼
-99 -78 16 20 36 -81 -29 46 25 59 -64 -7 39 26 88 -1 35 85 76 100▼
-99 -78 -29 -81 16 -64 -7 20 -1 39 25 26 36 46 59 35 76 88 85 100▼
-99 -81 -78 -64 -29 -7 -1 16 20 25 26 35 36 39 46 59 76 85 88 100▼
The quick brown fox jumps over the lazy dog.▼
The brown fox jumps lazy dog. quick over the▼
The brown dog. fox jumps lazy over quick the</pre>▼
=={{header|Phix}}==
Line 1,280 ⟶ 1,245:
'#("cat" "chair" "sponge" "table")
</pre>
(formerly Perl 6)
▲The given algorithm can be simplified in several ways. There's no need to compute the midpoint, since the hi/lo will end up there. The extra swap conditional can be eliminated by incrementing hi at the correct moment inside the loop. There's no need to
▲pass accumulated swaps down the call stack.
▲This does generic comparisons, so it works on any ordered type, including numbers or strings.
▲<lang perl6>sub circlesort (@x, $beg, $end) {
▲ my $swaps = 0;
▲ if $beg < $end {
▲ my ($lo, $hi) = $beg, $end;
▲ repeat {
▲ if @x[$lo] after @x[$hi] {
▲ @x[$lo,$hi] .= reverse;
▲ ++$swaps;
▲ }
▲ ++$hi if --$hi == ++$lo
▲ } while $lo < $hi;
▲ $swaps += circlesort(@x, $beg, $hi);
▲ $swaps += circlesort(@x, $lo, $end);
▲ }
▲ $swaps;
▲}
▲say my @x = (-100..100).roll(20);
▲say @x while circlesort(@x, 0, @x.end);
▲say @x = <The quick brown fox jumps over the lazy dog.>;
▲say @x while circlesort(@x, 0, @x.end);</lang>
▲{{out}}
▲<pre>16 35 -64 -29 46 36 -1 -99 20 100 59 26 76 -78 39 85 -7 -81 25 88
▲-99 -78 16 20 36 -81 -29 46 25 59 -64 -7 39 26 88 -1 35 85 76 100
▲-99 -78 -29 -81 16 -64 -7 20 -1 39 25 26 36 46 59 35 76 88 85 100
▲-99 -81 -78 -64 -29 -7 -1 16 20 25 26 35 36 39 46 59 76 85 88 100
▲The quick brown fox jumps over the lazy dog.
▲The brown fox jumps lazy dog. quick over the
▲The brown dog. fox jumps lazy over quick the</pre>
=={{header|REXX}}==
Line 1,418 ⟶ 1,421:
before sort: [6, 7, 8, 9, 2, 5, 3, 4, 1]
after sort: [1, 2, 3, 4, 5, 6, 7, 8, 9]
=={{header|Scala}}==
<lang Scala>object CircleSort extends App {
|