Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
|
|
@ -1,17 +1,17 @@
|
|||
function gnomeSort(array:Array)
|
||||
{
|
||||
var pos:uint = 0;
|
||||
while(pos < array.length)
|
||||
{
|
||||
if(pos == 0 || array[pos] >= array[pos-1])
|
||||
pos++;
|
||||
else
|
||||
{
|
||||
var tmp = array[pos];
|
||||
array[pos] = array[pos-1];
|
||||
array[pos-1] = tmp;
|
||||
pos--;
|
||||
}
|
||||
}
|
||||
return array;
|
||||
var pos:uint = 0;
|
||||
while(pos < array.length)
|
||||
{
|
||||
if(pos == 0 || array[pos] >= array[pos-1])
|
||||
pos++;
|
||||
else
|
||||
{
|
||||
var tmp = array[pos];
|
||||
array[pos] = array[pos-1];
|
||||
array[pos-1] = tmp;
|
||||
pos--;
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
generic
|
||||
type Element_Type is private;
|
||||
type Index is (<>);
|
||||
type Collection is array(Index) of Element_Type;
|
||||
with function "<=" (Left, Right : Element_Type) return Boolean is <>;
|
||||
procedure Gnome_Sort(Item : in out Collection);
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
procedure Gnome_Sort(Item : in out Collection) is
|
||||
procedure Swap(Left, Right : in out Element_Type) is
|
||||
Temp : Element_Type := Left;
|
||||
begin
|
||||
Left := Right;
|
||||
Right := Temp;
|
||||
end Swap;
|
||||
|
||||
I : Integer := Index'Pos(Index'Succ(Index'First));
|
||||
J : Integer := I + 1;
|
||||
begin
|
||||
while I <= Index'Pos(Index'Last) loop
|
||||
if Item(Index'Val(I - 1)) <= Item(Index'Val(I)) then
|
||||
I := J;
|
||||
J := J + 1;
|
||||
else
|
||||
Swap(Item(Index'Val(I - 1)), Item(Index'Val(I)));
|
||||
I := I - 1;
|
||||
if I = Index'Pos(Index'First) then
|
||||
I := J;
|
||||
J := J + 1;
|
||||
end if;
|
||||
end if;
|
||||
end loop;
|
||||
end Gnome_Sort;
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
with Gnome_Sort;
|
||||
with Ada.Text_Io; use Ada.Text_Io;
|
||||
|
||||
procedure Gnome_Sort_Test is
|
||||
type Index is range 0..9;
|
||||
type Buf is array(Index) of Integer;
|
||||
procedure Sort is new Gnome_Sort(Integer, Index, Buf);
|
||||
A : Buf := (900, 700, 800, 600, 400, 500, 200, 100, 300, 0);
|
||||
begin
|
||||
for I in A'range loop
|
||||
Put(Integer'Image(A(I)));
|
||||
end loop;
|
||||
New_Line;
|
||||
Sort(A);
|
||||
for I in A'range loop
|
||||
Put(Integer'Image(A(I)));
|
||||
end loop;
|
||||
New_Line;
|
||||
end Gnome_Sort_Test;
|
||||
|
|
@ -4,38 +4,38 @@ dim array(15)
|
|||
a = array[?,]
|
||||
b = array[?]
|
||||
for i = a to b
|
||||
array[i] = int(rand * 100)
|
||||
array[i] = int(rand * 100)
|
||||
next i
|
||||
|
||||
print "unsort ";
|
||||
for i = a to b
|
||||
print rjust(array[i], 4);
|
||||
print rjust(array[i], 4);
|
||||
next i
|
||||
|
||||
call gnomeSort(array)
|
||||
|
||||
print chr(10); " sort ";
|
||||
for i = a to b
|
||||
print rjust(array[i], 4);
|
||||
print rjust(array[i], 4);
|
||||
next i
|
||||
end
|
||||
|
||||
subroutine gnomeSort (array)
|
||||
i = array[?,] + 1
|
||||
j = i + 1
|
||||
while i <= array[?]
|
||||
if array[i - 1] <= array[i] then
|
||||
i = j
|
||||
j += 1
|
||||
else
|
||||
temp = array[i - 1]
|
||||
array[i - 1] = array[i]
|
||||
array[i] = temp
|
||||
i -= 1
|
||||
if i = array[?,] then
|
||||
i = j
|
||||
j += 1
|
||||
end if
|
||||
end if
|
||||
end while
|
||||
i = array[?,] + 1
|
||||
j = i + 1
|
||||
while i <= array[?]
|
||||
if array[i - 1] <= array[i] then
|
||||
i = j
|
||||
j += 1
|
||||
else
|
||||
temp = array[i - 1]
|
||||
array[i - 1] = array[i]
|
||||
array[i] = temp
|
||||
i -= 1
|
||||
if i = array[?,] then
|
||||
i = j
|
||||
j += 1
|
||||
end if
|
||||
end if
|
||||
end while
|
||||
end subroutine
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ SET /A tmpElements=%numElements% - 1
|
|||
:: Create array of random numbers and output to file.
|
||||
ECHO GnomeSort Random Input 0 to %tmpElements%:>%~n0.txt
|
||||
FOR /L %%X IN (0, 1, %tmpElements%) DO (
|
||||
SET array[%%X]=!RANDOM!
|
||||
ECHO !array[%%X]!>>%~n0.txt
|
||||
SET array[%%X]=!RANDOM!
|
||||
ECHO !array[%%X]!>>%~n0.txt
|
||||
)
|
||||
|
||||
:GnomeSort
|
||||
|
|
@ -28,26 +28,26 @@ TITLE GnomeSort:[%gs1%][%gsTmp%] of %tmpElements%
|
|||
:: pseudo code supplied by Rosetta Code. I had to add an additional
|
||||
:: pointer to represent i-1, because of limitations in WinNT Batch.
|
||||
IF %gs2% LSS %numElements% (
|
||||
REM if i-1 <= i advance pointers to next unchecked element, then loop.
|
||||
IF !array[%gs1%]! LEQ !array[%gs2%]! (
|
||||
SET /A gs1=%gs3% - 1
|
||||
SET /A gs2=%gs3%
|
||||
SET /A gs3=%gs3% + 1
|
||||
) ELSE (
|
||||
REM ... else swap i-1 and i, decrement pointers to check previous element, then loop.
|
||||
SET gsTmp=!array[%gs1%]!
|
||||
SET array[%gs1%]=!array[%gs2%]!
|
||||
SET array[%gs2%]=!gsTmp!
|
||||
SET /A gs1-=1
|
||||
SET /A gs2-=1
|
||||
REM if first element has been reached, set pointers to next unchecked element.
|
||||
IF !gs2! EQU 0 (
|
||||
SET /A gs1=%gs3% - 1
|
||||
SET /A gs2=%gs3%
|
||||
SET /A gs3=%gs3% + 1
|
||||
)
|
||||
)
|
||||
GOTO :GS_Loop
|
||||
REM if i-1 <= i advance pointers to next unchecked element, then loop.
|
||||
IF !array[%gs1%]! LEQ !array[%gs2%]! (
|
||||
SET /A gs1=%gs3% - 1
|
||||
SET /A gs2=%gs3%
|
||||
SET /A gs3=%gs3% + 1
|
||||
) ELSE (
|
||||
REM ... else swap i-1 and i, decrement pointers to check previous element, then loop.
|
||||
SET gsTmp=!array[%gs1%]!
|
||||
SET array[%gs1%]=!array[%gs2%]!
|
||||
SET array[%gs2%]=!gsTmp!
|
||||
SET /A gs1-=1
|
||||
SET /A gs2-=1
|
||||
REM if first element has been reached, set pointers to next unchecked element.
|
||||
IF !gs2! EQU 0 (
|
||||
SET /A gs1=%gs3% - 1
|
||||
SET /A gs2=%gs3%
|
||||
SET /A gs3=%gs3% + 1
|
||||
)
|
||||
)
|
||||
GOTO :GS_Loop
|
||||
)
|
||||
TITLE GnomeSort:[%gs1%][%gsTmp%] - Done!
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
C-SORT SECTION.
|
||||
C-000.
|
||||
DISPLAY "SORT STARTING".
|
||||
|
||||
SET WB-IX-1 TO 2.
|
||||
MOVE 1 TO WC-NEXT-POSN.
|
||||
|
||||
PERFORM E-GNOME UNTIL WC-NEXT-POSN > WC-SIZE.
|
||||
|
||||
DISPLAY "SORT FINISHED".
|
||||
|
||||
C-999.
|
||||
EXIT.
|
||||
|
||||
E-GNOME SECTION.
|
||||
E-000.
|
||||
IF WB-ENTRY(WB-IX-1 - 1) NOT > WB-ENTRY(WB-IX-1)
|
||||
ADD 1 TO WC-NEXT-POSN
|
||||
SET WB-IX-1 TO WC-NEXT-POSN
|
||||
ELSE
|
||||
MOVE WB-ENTRY(WB-IX-1 - 1) TO WC-TEMP
|
||||
MOVE WB-ENTRY(WB-IX-1) TO WB-ENTRY(WB-IX-1 - 1)
|
||||
MOVE WC-TEMP TO WB-ENTRY(WB-IX-1)
|
||||
SET WB-IX-1 DOWN BY 1
|
||||
IF WB-IX-1 = 1
|
||||
ADD 1 TO WC-NEXT-POSN
|
||||
SET WB-IX-1 TO WC-NEXT-POSN.
|
||||
|
||||
E-999.
|
||||
EXIT.
|
||||
|
|
@ -1,63 +1,63 @@
|
|||
class
|
||||
GNOME_SORT [G -> COMPARABLE]
|
||||
GNOME_SORT [G -> COMPARABLE]
|
||||
|
||||
feature
|
||||
|
||||
sort (ar: ARRAY [G]): ARRAY [G]
|
||||
-- Sorted array in ascending order.
|
||||
require
|
||||
array_not_void: ar /= Void
|
||||
local
|
||||
i, j: INTEGER
|
||||
ith: G
|
||||
do
|
||||
create Result.make_empty
|
||||
Result.deep_copy (ar)
|
||||
from
|
||||
i := 2
|
||||
j := 3
|
||||
until
|
||||
i > Result.count
|
||||
loop
|
||||
if Result [i - 1] <= Result [i] then
|
||||
i := j
|
||||
j := j + 1
|
||||
else
|
||||
ith := Result [i - 1]
|
||||
Result [i - 1] := Result [i]
|
||||
Result [i] := ith
|
||||
i := i - 1
|
||||
if i = 1 then
|
||||
i := j
|
||||
j := j + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
ensure
|
||||
Same_length: ar.count = Result.count
|
||||
Result_is_sorted: is_sorted (Result)
|
||||
end
|
||||
sort (ar: ARRAY [G]): ARRAY [G]
|
||||
-- Sorted array in ascending order.
|
||||
require
|
||||
array_not_void: ar /= Void
|
||||
local
|
||||
i, j: INTEGER
|
||||
ith: G
|
||||
do
|
||||
create Result.make_empty
|
||||
Result.deep_copy (ar)
|
||||
from
|
||||
i := 2
|
||||
j := 3
|
||||
until
|
||||
i > Result.count
|
||||
loop
|
||||
if Result [i - 1] <= Result [i] then
|
||||
i := j
|
||||
j := j + 1
|
||||
else
|
||||
ith := Result [i - 1]
|
||||
Result [i - 1] := Result [i]
|
||||
Result [i] := ith
|
||||
i := i - 1
|
||||
if i = 1 then
|
||||
i := j
|
||||
j := j + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
ensure
|
||||
Same_length: ar.count = Result.count
|
||||
Result_is_sorted: is_sorted (Result)
|
||||
end
|
||||
|
||||
feature {NONE}
|
||||
|
||||
is_sorted (ar: ARRAY [G]): BOOLEAN
|
||||
--- Is 'ar' sorted in ascending order?
|
||||
require
|
||||
ar_not_empty: ar.is_empty = False
|
||||
local
|
||||
i: INTEGER
|
||||
do
|
||||
Result := True
|
||||
from
|
||||
i := ar.lower
|
||||
until
|
||||
i = ar.upper
|
||||
loop
|
||||
if ar [i] > ar [i + 1] then
|
||||
Result := False
|
||||
end
|
||||
i := i + 1
|
||||
end
|
||||
end
|
||||
is_sorted (ar: ARRAY [G]): BOOLEAN
|
||||
--- Is 'ar' sorted in ascending order?
|
||||
require
|
||||
ar_not_empty: ar.is_empty = False
|
||||
local
|
||||
i: INTEGER
|
||||
do
|
||||
Result := True
|
||||
from
|
||||
i := ar.lower
|
||||
until
|
||||
i = ar.upper
|
||||
loop
|
||||
if ar [i] > ar [i + 1] then
|
||||
Result := False
|
||||
end
|
||||
i := i + 1
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,33 +1,33 @@
|
|||
class
|
||||
APPLICATION
|
||||
APPLICATION
|
||||
|
||||
create
|
||||
make
|
||||
make
|
||||
|
||||
feature
|
||||
|
||||
make
|
||||
do
|
||||
test := <<7, 99, -7, 1, 0, 25, -10>>
|
||||
io.put_string ("unsorted:%N")
|
||||
across
|
||||
test as ar
|
||||
loop
|
||||
io.put_string (ar.item.out + "%T")
|
||||
end
|
||||
io.new_line
|
||||
io.put_string ("sorted:%N")
|
||||
create gnome
|
||||
test := gnome.sort (test)
|
||||
across
|
||||
test as ar
|
||||
loop
|
||||
io.put_string (ar.item.out + "%T")
|
||||
end
|
||||
end
|
||||
make
|
||||
do
|
||||
test := <<7, 99, -7, 1, 0, 25, -10>>
|
||||
io.put_string ("unsorted:%N")
|
||||
across
|
||||
test as ar
|
||||
loop
|
||||
io.put_string (ar.item.out + "%T")
|
||||
end
|
||||
io.new_line
|
||||
io.put_string ("sorted:%N")
|
||||
create gnome
|
||||
test := gnome.sort (test)
|
||||
across
|
||||
test as ar
|
||||
loop
|
||||
io.put_string (ar.item.out + "%T")
|
||||
end
|
||||
end
|
||||
|
||||
test: ARRAY [INTEGER]
|
||||
test: ARRAY [INTEGER]
|
||||
|
||||
gnome: GNOME_SORT [INTEGER]
|
||||
gnome: GNOME_SORT [INTEGER]
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
gnome(L, []) -> L;
|
||||
gnome([Prev|P], [Next|N]) when Next > Prev ->
|
||||
gnome(P, [Next|[Prev|N]]);
|
||||
gnome(P, [Next|[Prev|N]]);
|
||||
gnome(P, [Next|N]) ->
|
||||
gnome([Next|P], N).
|
||||
gnome([Next|P], N).
|
||||
gnome([H|T]) -> gnome([H], T).
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
function gnomeSort(sequence s)
|
||||
integer i,j
|
||||
object temp
|
||||
i = 1
|
||||
j = 2
|
||||
while i < length(s) do
|
||||
if compare(s[i], s[i+1]) <= 0 then
|
||||
i = j
|
||||
j += 1
|
||||
else
|
||||
temp = s[i]
|
||||
s[i] = s[i+1]
|
||||
s[i+1] = temp
|
||||
i -= 1
|
||||
if i = 0 then
|
||||
i = j
|
||||
j += 1
|
||||
end if
|
||||
end if
|
||||
end while
|
||||
return s
|
||||
end function
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
gnomeSort [] = []
|
||||
gnomeSort (x:xs) = gs [x] xs
|
||||
where
|
||||
gs vv@(v:vs) (w:ws)
|
||||
| v<=w = gs (w:vv) ws
|
||||
| otherwise = gs vs (w:v:ws)
|
||||
gs [] (y:ys) = gs [y] ys
|
||||
gs xs [] = reverse xs
|
||||
gs vv@(v:vs) (w:ws)
|
||||
| v<=w = gs (w:vv) ws
|
||||
| otherwise = gs vs (w:v:ws)
|
||||
gs [] (y:ys) = gs [y] ys
|
||||
gs xs [] = reverse xs
|
||||
-- keeping the first argument of gs in reverse order avoids the deterioration into cubic behaviour
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
class GnomeSort {
|
||||
@:generic
|
||||
public static function sort<T>(arr:Array<T>) {
|
||||
var i = 1;
|
||||
var j = 2;
|
||||
while (i < arr.length) {
|
||||
if (Reflect.compare(arr[i - 1], arr[i]) <= 0) {
|
||||
i = j++;
|
||||
} else {
|
||||
var temp = arr[i];
|
||||
arr[i] = arr[i - 1];
|
||||
arr[i - 1] = temp;
|
||||
if (--i == 0) {
|
||||
i = j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Main {
|
||||
static function main() {
|
||||
var integerArray = [1, 10, 2, 5, -1, 5, -19, 4, 23, 0];
|
||||
var floatArray = [1.0, -3.2, 5.2, 10.8, -5.7, 7.3,
|
||||
3.5, 0.0, -4.1, -9.5];
|
||||
var stringArray = ['We', 'hold', 'these', 'truths', 'to',
|
||||
'be', 'self-evident', 'that', 'all',
|
||||
'men', 'are', 'created', 'equal'];
|
||||
Sys.println('Unsorted Integers: ' + integerArray);
|
||||
GnomeSort.sort(integerArray);
|
||||
Sys.println('Sorted Integers: ' + integerArray);
|
||||
Sys.println('Unsorted Floats: ' + floatArray);
|
||||
GnomeSort.sort(floatArray);
|
||||
Sys.println('Sorted Floats: ' + floatArray);
|
||||
Sys.println('Unsorted Strings: ' + stringArray);
|
||||
GnomeSort.sort(stringArray);
|
||||
Sys.println('Sorted Strings: ' + stringArray);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +1,24 @@
|
|||
fn gnomeSort arr =
|
||||
(
|
||||
local i = 2
|
||||
local j = 3
|
||||
while i <= arr.count do
|
||||
(
|
||||
if arr[i-1] <= arr[i] then
|
||||
(
|
||||
i = j
|
||||
j += 1
|
||||
)
|
||||
else
|
||||
(
|
||||
swap arr[i-1] arr[i]
|
||||
i -= 1
|
||||
if i == 1 then
|
||||
(
|
||||
i = j
|
||||
j += 1
|
||||
)
|
||||
)
|
||||
)
|
||||
return arr
|
||||
local i = 2
|
||||
local j = 3
|
||||
while i <= arr.count do
|
||||
(
|
||||
if arr[i-1] <= arr[i] then
|
||||
(
|
||||
i = j
|
||||
j += 1
|
||||
)
|
||||
else
|
||||
(
|
||||
swap arr[i-1] arr[i]
|
||||
i -= 1
|
||||
if i == 1 then
|
||||
(
|
||||
i = j
|
||||
j += 1
|
||||
)
|
||||
)
|
||||
)
|
||||
return arr
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ arr := Array([17,3,72,0,36,2,3,8,40,0]):
|
|||
len := numelems(arr):
|
||||
i := 2:
|
||||
while (i <= len) do
|
||||
if (i=1 or arr[i] >= arr[i-1]) then
|
||||
i++:
|
||||
else
|
||||
temp:= arr[i]:
|
||||
arr[i] := arr[i-1]:
|
||||
arr[i-1] := temp:
|
||||
i--:
|
||||
end if:
|
||||
if (i=1 or arr[i] >= arr[i-1]) then
|
||||
i++:
|
||||
else
|
||||
temp:= arr[i]:
|
||||
arr[i] := arr[i-1]:
|
||||
arr[i-1] := temp:
|
||||
i--:
|
||||
end if:
|
||||
end do:
|
||||
arr;
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
gnomesort = function(a)
|
||||
i = 1
|
||||
j = 2
|
||||
while i < a.len
|
||||
if a[i-1] <= a[i] then
|
||||
i = j
|
||||
j = j + 1
|
||||
else
|
||||
k = a[i-1]
|
||||
a[i-1] = a[i]
|
||||
a[i] = k
|
||||
i = i - 1
|
||||
if i == 0 then
|
||||
i = j
|
||||
j = j + 1
|
||||
end if
|
||||
end if
|
||||
end while
|
||||
i = 1
|
||||
j = 2
|
||||
while i < a.len
|
||||
if a[i-1] <= a[i] then
|
||||
i = j
|
||||
j = j + 1
|
||||
else
|
||||
k = a[i-1]
|
||||
a[i-1] = a[i]
|
||||
a[i] = k
|
||||
i = i - 1
|
||||
if i == 0 then
|
||||
i = j
|
||||
j = j + 1
|
||||
end if
|
||||
end if
|
||||
end while
|
||||
end function
|
||||
a = [3, 7, 4, 2, 5, 1, 6]
|
||||
gnomesort(a)
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ function s = gnomesort(v)
|
|||
v(i) = t;
|
||||
i--;
|
||||
if ( i == 1 )
|
||||
i = j;
|
||||
j++;
|
||||
i = j;
|
||||
j++;
|
||||
endif
|
||||
endif
|
||||
endwhile
|
||||
|
|
|
|||
|
|
@ -1,20 +1,20 @@
|
|||
function gnomeSort($arr){
|
||||
$i = 1;
|
||||
$j = 2;
|
||||
while($i < count($arr)){
|
||||
if ($arr[$i-1] <= $arr[$i]){
|
||||
$i = $j;
|
||||
$j++;
|
||||
}else{
|
||||
list($arr[$i],$arr[$i-1]) = array($arr[$i-1],$arr[$i]);
|
||||
$i--;
|
||||
if($i == 0){
|
||||
$i = $j;
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $arr;
|
||||
$i = 1;
|
||||
$j = 2;
|
||||
while($i < count($arr)){
|
||||
if ($arr[$i-1] <= $arr[$i]){
|
||||
$i = $j;
|
||||
$j++;
|
||||
}else{
|
||||
list($arr[$i],$arr[$i-1]) = array($arr[$i-1],$arr[$i]);
|
||||
$i--;
|
||||
if($i == 0){
|
||||
$i = $j;
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
$arr = array(3,1,6,2,9,4,7,8,5);
|
||||
echo implode(',',gnomeSort($arr));
|
||||
|
|
|
|||
|
|
@ -1,24 +1,24 @@
|
|||
procedure gnomesort(var arr : Array of Integer; size : Integer);
|
||||
var
|
||||
i, j, t : Integer;
|
||||
i, j, t : Integer;
|
||||
begin
|
||||
i := 1;
|
||||
j := 2;
|
||||
while i < size do begin
|
||||
if arr[i-1] <= arr[i] then
|
||||
begin
|
||||
i := j;
|
||||
j := j + 1
|
||||
i := j;
|
||||
j := j + 1
|
||||
end
|
||||
else begin
|
||||
t := arr[i-1];
|
||||
arr[i-1] := arr[i];
|
||||
arr[i] := t;
|
||||
i := i - 1;
|
||||
if i = 0 then begin
|
||||
i := j;
|
||||
j := j + 1
|
||||
end
|
||||
t := arr[i-1];
|
||||
arr[i-1] := arr[i];
|
||||
arr[i] := t;
|
||||
i := i - 1;
|
||||
if i = 0 then begin
|
||||
i := j;
|
||||
j := j + 1
|
||||
end
|
||||
end
|
||||
end;
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -8,17 +8,17 @@ sub gnome_sort
|
|||
my $i = 1;
|
||||
my $j = 2;
|
||||
while($i < $size) {
|
||||
if ( $a[$i-1] <= $a[$i] ) {
|
||||
$i = $j;
|
||||
$j++;
|
||||
} else {
|
||||
@a[$i, $i-1] = @a[$i-1, $i];
|
||||
$i--;
|
||||
if ($i == 0) {
|
||||
$i = $j;
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
if ( $a[$i-1] <= $a[$i] ) {
|
||||
$i = $j;
|
||||
$j++;
|
||||
} else {
|
||||
@a[$i, $i-1] = @a[$i-1, $i];
|
||||
$i--;
|
||||
if ($i == 0) {
|
||||
$i = $j;
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return @a;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
local function gnome_sort(a, asc)
|
||||
local size = #a
|
||||
local i = 2
|
||||
local j = 3
|
||||
while i <= size do
|
||||
if (asc and a[i - 1] <= a[i]) or (!asc and a[i - 1] >= a[i]) then
|
||||
i = j
|
||||
j += 1
|
||||
else
|
||||
a[i], a[i - 1] = a[i - 1], a[i]
|
||||
i -= 1
|
||||
if i == 1 then
|
||||
i = j
|
||||
j += 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local array = { {4, 65, 2, -31, 0, 99, 2, 83, 782, 1}, {7, 5, 2, 6, 1, 4, 2, 6, 3} }
|
||||
for {true, false} as asc do
|
||||
print($"Sorting in {asc ? "ascending" : "descending"} order:\n")
|
||||
for array as a do
|
||||
local b = asc ? a : (a:clone())
|
||||
print($"Before: \{{b:concat(", ")}}")
|
||||
gnome_sort(b, asc)
|
||||
print($"After : \{{b:concat(", ")}}")
|
||||
print()
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
function gnomesort($a) {
|
||||
$size, $i, $j = $a.Count, 1, 2
|
||||
while($i -lt $size) {
|
||||
if ($a[$i-1] -le $a[$i]) {
|
||||
$i = $j
|
||||
$j++
|
||||
}
|
||||
else {
|
||||
$a[$i-1], $a[$i] = $a[$i], $a[$i-1]
|
||||
$i--
|
||||
if($i -eq 0) {
|
||||
$i = $j
|
||||
$j++
|
||||
}
|
||||
}
|
||||
}
|
||||
$a
|
||||
}
|
||||
$array = @(60, 21, 19, 36, 63, 8, 100, 80, 3, 87, 11)
|
||||
"$(gnomesort $array)"
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
>>> def gnomesort(a):
|
||||
i,j,size = 1,2,len(a)
|
||||
while i < size:
|
||||
if a[i-1] <= a[i]:
|
||||
i,j = j, j+1
|
||||
else:
|
||||
a[i-1],a[i] = a[i],a[i-1]
|
||||
i -= 1
|
||||
if i == 0:
|
||||
i,j = j, j+1
|
||||
return a
|
||||
i,j,size = 1,2,len(a)
|
||||
while i < size:
|
||||
if a[i-1] <= a[i]:
|
||||
i,j = j, j+1
|
||||
else:
|
||||
a[i-1],a[i] = a[i],a[i-1]
|
||||
i -= 1
|
||||
if i == 0:
|
||||
i,j = j, j+1
|
||||
return a
|
||||
|
||||
>>> gnomesort([3,4,2,5,1,6])
|
||||
[1, 2, 3, 4, 5, 6]
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
import List;
|
||||
|
||||
public list[int] gnomeSort(a){
|
||||
i = 1;
|
||||
j = 2;
|
||||
while(i < size(a)){
|
||||
if(a[i-1] <= a[i]){
|
||||
i = j;
|
||||
j += 1;}
|
||||
else{
|
||||
temp = a[i-1];
|
||||
a[i-1] = a[i];
|
||||
a[i] = temp;
|
||||
i = i - 1;
|
||||
if(i == 0){
|
||||
i = j;
|
||||
j += 1;}}}
|
||||
return a;
|
||||
i = 1;
|
||||
j = 2;
|
||||
while(i < size(a)){
|
||||
if(a[i-1] <= a[i]){
|
||||
i = j;
|
||||
j += 1;}
|
||||
else{
|
||||
temp = a[i-1];
|
||||
a[i-1] = a[i];
|
||||
a[i] = temp;
|
||||
i = i - 1;
|
||||
if(i == 0){
|
||||
i = j;
|
||||
j += 1;}}}
|
||||
return a;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
Rebol [
|
||||
title: "Rosetta code: Sorting algorithms/Gnome sort"
|
||||
file: %Sorting_algorithms-Gnome_sort.r3
|
||||
url: https://rosettacode.org/wiki/Sorting_algorithms/Gnome_sort
|
||||
]
|
||||
|
||||
gnome-sort: function [
|
||||
"In-place gnome sort: steps forward when order is correct, swaps and steps back when not"
|
||||
items [series!]
|
||||
][
|
||||
n: length? items
|
||||
i: 2 ;; start at second element, comparing i-1 and i
|
||||
while [i <= n][
|
||||
either items/(i - 1) <= items/:i [ ;; pair is in order
|
||||
++ i ;; advance
|
||||
][ ;; pair is out of order
|
||||
swap at items (i - 1) at items i ;; swap
|
||||
if i > 2 [-- i] ;; and step back if not already at start
|
||||
]
|
||||
]
|
||||
items
|
||||
]
|
||||
|
||||
probe gnome-sort [3 1 2 8 5 7 9 4 6]
|
||||
probe gnome-sort "Hello Gnome"
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
function gnomeSort( a )
|
||||
dim i
|
||||
dim j
|
||||
i = 1
|
||||
j = 2
|
||||
do while i < ubound( a ) + 1
|
||||
if a(i-1) <= a(i) then
|
||||
i = j
|
||||
j = j + 1
|
||||
else
|
||||
swap a(i-1), a(i)
|
||||
i = i - 1
|
||||
if i = 0 then
|
||||
i = j
|
||||
j = j + 1
|
||||
end if
|
||||
end if
|
||||
loop
|
||||
gnomeSort = a
|
||||
end function
|
||||
|
||||
sub swap( byref x, byref y )
|
||||
dim temp
|
||||
temp = x
|
||||
x = y
|
||||
y = temp
|
||||
end sub
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
dim a
|
||||
dim b
|
||||
|
||||
a = array( "zanzibar", "aardvark","ampicillin","zulu","gogodala", "wolverhampton")
|
||||
b = gnomeSort( a )
|
||||
wscript.echo join(a, ", ")
|
||||
|
||||
a = array( 234,567,345,568,2345,89,547,23,649,5769,456,456,567)
|
||||
b = gnomeSort( a )
|
||||
wscript.echo join(a, ", ")
|
||||
|
||||
a = array( true, false, true, true, false, false, true, false)
|
||||
b = gnomeSort( a )
|
||||
wscript.echo join(a, ", ")
|
||||
|
||||
a = array( 1,2,2,4,67789,-3,-45.99)
|
||||
b = gnomeSort( a )
|
||||
wscript.echo join(a, ", ")
|
||||
|
||||
a = array( now(), now()-1,now()+2)
|
||||
b = gnomeSort( a )
|
||||
wscript.echo join(a, ", ")
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
aardvark, ampicillin, gogodala, wolverhampton, zanzibar, zulu
|
||||
23, 89, 234, 345, 456, 456, 547, 567, 567, 568, 649, 2345, 5769
|
||||
True, True, True, True, False, False, False, False
|
||||
-45.99, -3, 1, 2, 2, 4, 67789
|
||||
2/02/2010 10:19:51 AM, 3/02/2010 10:19:51 AM, 5/02/2010 10:19:51 AM
|
||||
|
|
@ -19,24 +19,24 @@ end
|
|||
|
||||
sub gnomeSort(array())
|
||||
local ub, ul, i, j, temp
|
||||
|
||||
lb = 0 : ub = arraysize(array(),1)
|
||||
i = lb +1 : j = lb +2
|
||||
|
||||
while i <= ub
|
||||
// replace "<=" with ">=" for downwards sort
|
||||
if array(i -1) <= array(i) then
|
||||
i = j
|
||||
j = j + 1
|
||||
else
|
||||
temp = array(i -1)
|
||||
array(i -1) = array(i)
|
||||
array(i) = temp
|
||||
i = i - 1
|
||||
if i = lb then
|
||||
i = j
|
||||
j = j + 1
|
||||
fi
|
||||
fi
|
||||
wend
|
||||
lb = 0 : ub = arraysize(array(),1)
|
||||
i = lb +1 : j = lb +2
|
||||
|
||||
while i <= ub
|
||||
// replace "<=" with ">=" for downwards sort
|
||||
if array(i -1) <= array(i) then
|
||||
i = j
|
||||
j = j + 1
|
||||
else
|
||||
temp = array(i -1)
|
||||
array(i -1) = array(i)
|
||||
array(i) = temp
|
||||
i = i - 1
|
||||
if i = lb then
|
||||
i = j
|
||||
j = j + 1
|
||||
fi
|
||||
fi
|
||||
wend
|
||||
end sub
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@ fcn gnomeSort(a){
|
|||
i,j,size := 1,2,a.len();
|
||||
while(i < size){
|
||||
if(a[i-1] > a[i]){ // for descending sort, use < for comparison
|
||||
a.swap(i-1,i);
|
||||
i = i - 1;
|
||||
if(i) continue;
|
||||
a.swap(i-1,i);
|
||||
i = i - 1;
|
||||
if(i) continue;
|
||||
}
|
||||
i = j;
|
||||
j = j + 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue