Skip to content

Commit

Permalink
Gnome sort
Browse files Browse the repository at this point in the history
  • Loading branch information
ash committed Jun 27, 2019
1 parent c12c547 commit ca84ca3
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 22 deletions.
17 changes: 9 additions & 8 deletions sort/gnome-sort-1.pl6
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
sub gnome-sort(@data) {
my $done = False;
while !$done {
$done = True;
for 1 ..^ @data -> $i {
if [>] @data[$i - 1, $i] {
@data[$i - 1, $i].=reverse;
$done = False;
}
my $pos = 0;

while $pos != @data.elems - 1 {
if !$pos or @data[$pos] >= @data[$pos - 1] {
$pos++;
}
else {
@data[$pos, $pos - 1] .= reverse;
$pos--;
}
}
}
Expand Down
19 changes: 15 additions & 4 deletions sort/gnome-sort-2.pl6
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
sub gnome-sort(@data) {
my $done = False;
while !$done {
$done = True;
$done = False, @data[$_ - 1, $_].=reverse if [>] @data[$_ - 1, $_] for 1 ..^ @data;

sub f($i) {
return 1 unless $i;

if @data[$i] >= @data[$i - 1] {
return $i + 1;
}
else {
@data[$i, $i - 1] .= reverse;
return $i - 1;
}
}

for 1, -> $i {f($i)} ... @data.elems - 1 {

}
}

Expand Down
21 changes: 11 additions & 10 deletions sort/gnome-sort-3.pl6
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
sub gnome-sort(@data) {
my $done = False;
while !$done {
$done = True;
for 1 ..^ @data -> $i {
my $adjacent := @data[$i - 1, $i];
if [>] $adjacent {
$adjacent.=reverse;
$done = False;
}
}

sub f($i) {
return 1 unless $i;

return $i + 1 if [>=] @data[$i, $i - 1];

@data[$i, $i - 1] .= reverse;

return $i - 1;
}

1, -> $i {f($i)} ... @data.elems - 1;
}

my @data = 4, 5, 7, 1, 46, 78, 2, 2, 1, 9, 10;
Expand Down
18 changes: 18 additions & 0 deletions sort/gnome-sort-4.pl6
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
sub gnome-sort(@data) {

multi sub f(0) { 1 }

multi sub f($i where [>=] @data[$i, $i - 1]) { $i + 1 }

multi sub f($i) {
@data[$i, $i - 1] .= reverse;

return $i - 1;
}

1, -> $i {f($i)} ... @data.elems - 1;
}

my @data = 4, 5, 7, 1, 46, 78, 2, 2, 1, 9, 10;
gnome-sort @data;
say @data;

0 comments on commit ca84ca3

Please sign in to comment.