Sorting algorithms/Stooge sort: Difference between revisions

added RPL
m (QuickBASIC and BBC BASIC moved to the BASIC section.)
(added RPL)
 
(8 intermediate revisions by 6 users not shown)
Line 25:
{{trans|Python}}
 
<syntaxhighlight lang="11l">F stoogesort(&l, i, j) -> NVoid
I l[j] < l[i]
swap(&l[i], &l[j])
Line 282:
 
=={{header|BASIC}}==
==={{header|BBC BASIC}}===
<syntaxhighlight lang="bbcbasic"> DIM test%(9)
test%() = 4, 65, 2, -31, 0, 99, 2, 83, 782, 1
PROCstoogesort(test%(), 0, DIM(test%(),1))
FOR i% = 0 TO 9
PRINT test%(i%) ;
NEXT
PRINT
END
DEF PROCstoogesort(l%(), i%, j%)
LOCAL t%
IF l%(j%) < l%(i%) SWAP l%(i%), l%(j%)
IF j% - i% > 1 THEN
t% = (j% - i% + 1)/3
PROCstoogesort(l%(), i%, j%-t%)
PROCstoogesort(l%(), i%+t%, j%)
PROCstoogesort(l%(), i%, j%-t%)
ENDIF
ENDPROC</syntaxhighlight>
{{out}}
<pre>
-31 0 1 2 2 4 65 83 99 782
</pre>
 
==={{header|QuickBASIC}}===
{{works with|QuickBASIC|7.1}}
 
Line 334 ⟶ 360:
Before: 11 50 11 37 97 94 92 70 92 57 88
After: 11 11 37 50 57 70 88 92 92 94 97
</pre>
 
=={{header|BBC BASIC}}==
<syntaxhighlight lang="bbcbasic"> DIM test%(9)
test%() = 4, 65, 2, -31, 0, 99, 2, 83, 782, 1
PROCstoogesort(test%(), 0, DIM(test%(),1))
FOR i% = 0 TO 9
PRINT test%(i%) ;
NEXT
PRINT
END
DEF PROCstoogesort(l%(), i%, j%)
LOCAL t%
IF l%(j%) < l%(i%) SWAP l%(i%), l%(j%)
IF j% - i% > 1 THEN
t% = (j% - i% + 1)/3
PROCstoogesort(l%(), i%, j%-t%)
PROCstoogesort(l%(), i%+t%, j%)
PROCstoogesort(l%(), i%, j%-t%)
ENDIF
ENDPROC</syntaxhighlight>
{{out}}
<pre>
-31 0 1 2 2 4 65 83 99 782
</pre>
 
Line 633 ⟶ 634:
{{out}}
[-6, -5, -2, 1, 3, 3, 4, 5, 7, 10]
 
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils,StdCtrls}}
 
 
<syntaxhighlight lang="Delphi">
 
 
procedure StoogeSort(var L: array of integer; I,J: integer);
var T,M: integer;
begin
if L[j] < L[i] then
begin
M:=L[I];
L[I]:=L[J];
L[J]:=M;
end;
if (J - I) > 1 then
begin
T:=(J - I + 1) div 3;
StoogeSort(L, I, J-T);
StoogeSort(L, I+T, J);
StoogeSort(L, I, J-T);
end;
end;
 
 
procedure DoStoogeSort(var L: array of integer);
begin
StoogeSort(L,0,High(L));
end;
 
 
var TestData: array [0..9] of integer = (17, 23, 21, 56, 14, 10, 5, 2, 30, 25);
 
 
function GetArrayStr(IA: array of integer): string;
var I: integer;
begin
Result:='[';
for I:=0 to High(IA) do
begin
if I>0 then Result:=Result+' ';
Result:=Result+Format('%3d',[IA[I]]);
end;
Result:=Result+']';
end;
 
procedure ShowStoogeSort(Memo: TMemo);
begin
Memo.Lines.Add('Raw Data: '+GetArrayStr(TestData));
DoStoogeSort(TestData);
Memo.Lines.Add('Sorted Data: '+GetArrayStr(TestData));
end;
 
 
</syntaxhighlight>
{{out}}
<pre>
Raw Data: [ 17 23 21 56 14 10 5 2 30 25]
Sorted Data: [ 2 5 10 14 17 21 23 25 30 56]
Elapsed Time: 1.158 ms.
 
</pre>
 
 
=={{header|EasyLang}}==
<syntaxhighlight>
proc stsort left right . d[] .
if d[left] > d[right]
swap d[left] d[right]
.
if right - left + 1 > 2
t = (right - left + 1) div 3
stsort left right - t d[]
stsort left + t right d[]
stsort left right - t d[]
.
.
for i = 1 to 100
d[] &= randint 1000
.
stsort 1 len d[] d[]
print d[]
</syntaxhighlight>
 
=={{header|Eiffel}}==
Line 710 ⟶ 797:
 
=={{header|Elena}}==
ELENA 46.x :
<syntaxhighlight lang="elena">import extensions;
import system'routines;
Line 737 ⟶ 824:
public program()
{
var list := new Range(0, 15).selectBy::(n => randomGenerator.evalnextInt(20)).toArray();
console.printLine("before:", list.asEnumerable());
Line 2,164 ⟶ 2,251:
-31 0 1 2 2 4 65 83 99 782
</pre>
 
=={{header|RPL}}==
« 0 → start end t
« DUP start GET OVER end GET
'''IF''' DUP2 > '''THEN'''
ROT start ROT PUT
end ROT PUT
'''ELSE''' DROP2 '''END'''
'''IF''' end start - 2 ≥ '''THEN'''
end start - 1 + 3 / FLOOR 't' STO
start end t - <span style="color:blue">STOOGESORT</span>
start t + end <span style="color:blue">STOOGESORT</span>
start end t - <span style="color:blue">STOOGESORT</span>
'''END'''
» » '<span style="color:blue">STOOGESORT</span>' STO <span style="color:grey">''@ ( { } start end → { } )''
 
{ 1 4 5 3 -6 3 7 10 -2 -5 7 5 9 -3 7 } 1 OVER SIZE <span style="color:blue">STOOGESORT</span>
{{out}}
<pre>
1: { -6 - 5 -3 -2 1 3 3 4 5 5 7 7 7 9 10 }
</pre>
Stooge sort is 436 times slower than the built-in <code>SORT</code> function on an HP-50g.
 
=={{header|Ruby}}==
Line 2,454 ⟶ 2,563:
 
=={{header|Wren}}==
<syntaxhighlight lang="ecmascriptwren">var stoogeSort // recursive
stoogeSort = Fn.new { |a, i, j|
if (a[j] < a[i]) {
Line 2,469 ⟶ 2,578:
}
 
var asarray = [ [4, 65, 2, -31, 0, 99, 2, 83, 782, 1], [7, 5, 2, 6, 1, 4, 2, 6, 3] ]
for (a in asarray) {
System.print("Before: %(a)")
stoogeSort.call(a, 0, a.count-1)
1,150

edits