Sorting algorithms/Gnome sort: Difference between revisions
Content added Content deleted
(Grouping BASIC dialects) |
(Added various BASIC dialects (BASIC256, Chipmunk Basic, GW-BASIC, QBasic, Run BASIC and Yabasic)) |
||
Line 793: | Line 793: | ||
=={{header|BASIC}}== |
=={{header|BASIC}}== |
||
==={{header|BASIC256}}=== |
|||
<syntaxhighlight lang="basic">arraybase 1 |
|||
global array |
|||
dim array(15) |
|||
a = array[?,] |
|||
b = array[?] |
|||
for i = a to b |
|||
array[i] = int(rand * 100) |
|||
next i |
|||
print "unsort "; |
|||
for i = a to b |
|||
print rjust(array[i], 4); |
|||
next i |
|||
call gnomeSort(array) |
|||
print chr(10); " sort "; |
|||
for i = a to b |
|||
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 |
|||
end subroutine</syntaxhighlight> |
|||
==={{header|BBC BASIC}}=== |
==={{header|BBC BASIC}}=== |
||
<syntaxhighlight lang="bbcbasic">DEF PROC_GnomeSort1(Size%) |
<syntaxhighlight lang="bbcbasic">DEF PROC_GnomeSort1(Size%) |
||
Line 811: | Line 854: | ||
UNTIL I%>Size% |
UNTIL I%>Size% |
||
ENDPROC</syntaxhighlight> |
ENDPROC</syntaxhighlight> |
||
==={{header|Chipmunk Basic}}=== |
|||
{{works with|Chipmunk Basic|3.6.4}} |
|||
{{works with|QBasic}} |
|||
{{trans|IS-BASIC}} |
|||
<syntaxhighlight lang="qbasic">100 RANDOMIZE TIMER |
|||
110 DIM array(18) |
|||
120 ' Init Array |
|||
130 FOR i = 0 TO UBOUND(array) |
|||
140 array(i) = INT(RND(1)*98)+1 |
|||
150 NEXT i |
|||
160 PRINT "unsort: "; : GOSUB 200 |
|||
170 GOSUB 260 : ' gnomeSort |
|||
180 PRINT " sort: "; : GOSUB 200 |
|||
190 END |
|||
200 ' Write Array |
|||
210 FOR i = 0 TO UBOUND(array) |
|||
220 PRINT array(i); |
|||
230 NEXT i |
|||
240 PRINT |
|||
250 RETURN |
|||
260 ' gnomeSort |
|||
270 i = 1 |
|||
280 j = i+1 |
|||
290 WHILE i <= UBOUND(array) |
|||
300 IF array(i-1) <= array(i) THEN |
|||
310 i = j : j = j+1 |
|||
320 ELSE |
|||
330 t = array(i-1) : array(i-1) = array(i) : array(i) = t : ' swap |
|||
340 i = i-1 |
|||
350 IF i = 0 THEN i = j : j = j+1 |
|||
360 ENDIF |
|||
370 WEND |
|||
380 RETURN</syntaxhighlight> |
|||
==={{header|FreeBASIC}}=== |
==={{header|FreeBASIC}}=== |
||
Line 913: | Line 990: | ||
<pre>To sort: - 249, 28, 111, 36, 171, 98, 29, 448, 44, 147, 154, 46, 102, 183, 24 |
<pre>To sort: - 249, 28, 111, 36, 171, 98, 29, 448, 44, 147, 154, 46, 102, 183, 24 |
||
Sorted: - 24, 28, 29, 36, 44, 46, 98, 102, 111, 147, 154, 171, 183, 249, 448</pre> |
Sorted: - 24, 28, 29, 36, 44, 46, 98, 102, 111, 147, 154, 171, 183, 249, 448</pre> |
||
==={{header|GW-BASIC}}=== |
|||
{{works with|PC-BASIC|any}} |
|||
{{works with|BASICA}} |
|||
{{works with|Chipmunk Basic}} |
|||
{{works with|QBasic}} |
|||
{{works with|Just BASIC}} |
|||
<syntaxhighlight lang="qbasic">100 REM GnomeSrt.bas |
|||
110 RANDOMIZE TIMER 'remove it for Just BASIC |
|||
120 DIM ARRAY(18) |
|||
130 ' Init Array |
|||
140 FOR I = 0 TO 18 |
|||
150 LET ARRAY(I) = INT(RND(1)*98)+1 |
|||
160 NEXT I |
|||
170 PRINT "unsort: "; : GOSUB 210 |
|||
180 GOSUB 270 : REM gnomeSort |
|||
190 PRINT " sort: "; : GOSUB 210 |
|||
200 END |
|||
210 ' Write Array |
|||
220 FOR I = 0 TO 18 |
|||
230 PRINT ARRAY(I); |
|||
240 NEXT I |
|||
250 PRINT |
|||
260 RETURN |
|||
270 ' gnomeSort |
|||
280 LET I = 1 |
|||
290 LET J = I+1 |
|||
300 WHILE I <= 18 |
|||
310 IF ARRAY(I-1) <= ARRAY(I) THEN LET I = J : LET J = J+1 : GOTO 330 |
|||
320 IF ARRAY(I-1) > ARRAY(I) THEN LET T = ARRAY(I-1) : LET ARRAY(I-1) = ARRAY(I) : LET ARRAY(I) = T : LET I = I-1 : IF I = 0 THEN LET I = J : LET J = J+1 |
|||
330 WEND |
|||
340 RETURN</syntaxhighlight> |
|||
==={{header|IS-BASIC}}=== |
==={{header|IS-BASIC}}=== |
||
Line 1,009: | Line 1,118: | ||
Wend |
Wend |
||
EndProcedure</syntaxhighlight> |
EndProcedure</syntaxhighlight> |
||
==={{header|QBasic}}=== |
|||
{{trans|IS-BASIC}} |
|||
{{works with|QBasic|1.1}} |
|||
{{works with|QuickBasic|4.5}} |
|||
{{works with|VB-DOS|1.0}} |
|||
{{works with|QB64|1.1}} |
|||
{{works with|PDS|7.1}} |
|||
{{works with|True BASIC}} |
|||
<syntaxhighlight lang="qbasic">RANDOMIZE TIMER 'RANDOMIZE for True BASIC |
|||
DIM array(-5 TO 12) |
|||
CALL iniciarray(array()) |
|||
PRINT "unsort: "; |
|||
CALL escritura(array()) |
|||
CALL gnomeSort(array()) |
|||
PRINT |
|||
PRINT " sort: "; |
|||
CALL escritura(array()) |
|||
END |
|||
SUB escritura (array()) |
|||
FOR i = LBOUND(array) TO UBOUND(array) |
|||
PRINT array(i); |
|||
NEXT i |
|||
PRINT |
|||
END SUB |
|||
SUB gnomeSort (array()) |
|||
LET i = LBOUND(array) + 1 |
|||
LET j = i + 1 |
|||
DO WHILE i <= UBOUND(array) |
|||
IF array(i - 1) <= array(i) THEN |
|||
LET i = j |
|||
LET j = j + 1 |
|||
ELSE |
|||
LET T = array(i - 1) |
|||
LET array(i - 1) = array(i) |
|||
LET array(i) = T |
|||
LET i = i - 1 |
|||
IF i = LBOUND(array) THEN |
|||
LET i = j |
|||
LET j = j + 1 |
|||
END IF |
|||
END IF |
|||
LOOP |
|||
END SUB |
|||
SUB iniciarray (array()) |
|||
FOR i = LBOUND(array) TO UBOUND(array) |
|||
LET array(i) = (RND * 98) + 1 |
|||
NEXT i |
|||
END SUB</syntaxhighlight> |
|||
==={{header|QuickBasic}}=== |
==={{header|QuickBasic}}=== |
||
{{works with|QBasic|1.1}} |
|||
{{works with|QuickBasic|4.5}} |
{{works with|QuickBasic|4.5}} |
||
{{trans|C}} |
{{trans|C}} |
||
Line 1,032: | Line 1,194: | ||
end if |
end if |
||
wend</syntaxhighlight> |
wend</syntaxhighlight> |
||
==={{header|Run BASIC}}=== |
|||
{{works with|Just BASIC}} |
|||
{{works with|Liberty BASIC}} |
|||
<syntaxhighlight lang="vb"> dim A(18) |
|||
[initArray] |
|||
for i = 0 to 18 |
|||
A(i) = int(rnd(1)*98)+1 |
|||
next i |
|||
print "unsort: "; |
|||
gosub [writeArray] |
|||
gosub [gnomeSort] |
|||
print " sort: "; |
|||
gosub [writeArray] |
|||
end |
|||
[writeArray] |
|||
for i = 0 to 18 |
|||
print A(i); " "; |
|||
next i |
|||
print |
|||
return |
|||
[gnomeSort] |
|||
i = 1 |
|||
j = i+1 |
|||
while i <= 18 |
|||
if A(i-1) <= A(i) then |
|||
i = j |
|||
j = j+1 |
|||
else |
|||
t = A(i-1) : A(i-1) = A(i) : A(i) = t |
|||
i = i-1 |
|||
if i = 0 then i = j : j = j+1 |
|||
end if |
|||
wend |
|||
return</syntaxhighlight> |
|||
==={{header|TI-83 BASIC}}=== |
==={{header|TI-83 BASIC}}=== |
||
Line 1,065: | Line 1,264: | ||
==={{header|True BASIC}}=== |
==={{header|True BASIC}}=== |
||
{{trans|IS-BASIC}} |
{{trans|IS-BASIC}} |
||
{{works with|QBasic}} |
|||
<syntaxhighlight lang="qbasic">RANDOMIZE !RAMDOMIZE TIMER en QBASIC |
<syntaxhighlight lang="qbasic">RANDOMIZE !RAMDOMIZE TIMER en QBASIC |
||
DIM array(-5 TO 12) |
DIM array(-5 TO 12) |
||
Line 1,191: | Line 1,391: | ||
End Sub</syntaxhighlight>{{out}} |
End Sub</syntaxhighlight>{{out}} |
||
<pre>1, 1, 1, 3, 4, 5, 7, 20</pre> |
<pre>1, 1, 1, 3, 4, 5, 7, 20</pre> |
||
==={{header|Yabasic}}=== |
|||
<syntaxhighlight lang="vb">dim array(15) |
|||
a = 0 |
|||
b = arraysize(array(),1) |
|||
print "unsort: "; |
|||
for i = a to b |
|||
array(i) = int(ran(98))+1 |
|||
print array(i), " "; |
|||
next i |
|||
print "\n sort: "; |
|||
gnomeSort(array()) |
|||
for i = a to b |
|||
print array(i), " "; |
|||
next i |
|||
print "\n" |
|||
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 |
|||
end sub</syntaxhighlight> |
|||
=={{header|Batch File}}== |
=={{header|Batch File}}== |