Microsoft Small Basic
Program Listing:
Embed this in your website
<object id='sbapp' data='data:application/x-silverlight-2,' type='application/x-silverlight-2' width='640' height='480'> <param name='source' value='http://smallbasic.com/program/ClientBin/SBWeb.xap'/> <param name='onError' value='onSilverlightError' /> <param name='background' value='white' /> <param name='minRuntimeVersion' value='3.0.40624.0' /> <param name='autoUpgrade' value='true' /> <param name='initParams' value='programId=SORTVIZ' /> </object>
'sorting algorithm demo
'compares two O(n^2) algorithms (bubble sort and insertion sort)
'with n log^2 n algorithm (shell sort)
'Zeven Provincien May 2010
rows
=
14
columns
=
14
size
=
24
offsetx
=
(
columns
+
1
)
*
size
offsety
=
(
rows
+
1
)
*
size
GraphicsWindow
.
Height
=
rows
*
size
*
2
+
size
GraphicsWindow
.
Width
=
columns
*
size
*
2
+
size
GraphicsWindow
.
Show
(
)
GraphicsWindow
.
BackgroundColor
=
"SteelBlue"
'set up random array
For
r
=
0
To
rows
-
1
For
c
=
0
To
columns
-
1
red
=
Math
.
GetRandomNumber
(
256
)
-
1
green
=
Math
.
GetRandomNumber
(
256
)
-
1
blue
=
Math
.
GetRandomNumber
(
256
)
-
1
'red = 0
green
=
0
'comment this line and next to get a more colorful effect
blue
=
0
GraphicsWindow
.
BrushColor
=
GraphicsWindow
.
GetColorFromRGB
(
red
,
green
,
blue
)
'GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
i
=
r
*
columns
+
c
boxes
[
i
]
[
"obj"
]
=
Shapes
.
AddRectangle
(
size
,
size
)
boxes2
[
i
]
[
"obj"
]
=
Shapes
.
AddRectangle
(
size
,
size
)
boxes3
[
i
]
[
"obj"
]
=
Shapes
.
AddRectangle
(
size
,
size
)
Shapes
.
Move
(
boxes
[
i
]
[
"obj"
]
,
c
*
size
,
r
*
size
)
Shapes
.
Move
(
boxes2
[
i
]
[
"obj"
]
,
c
*
size
+
offsetx
,
r
*
size
)
Shapes
.
Move
(
boxes3
[
i
]
[
"obj"
]
,
c
*
size
,
r
*
size
+
offsety
)
boxes
[
i
]
[
"val"
]
=
blue
+
green
+
red
boxes2
[
i
]
[
"val"
]
=
blue
+
green
+
red
boxes3
[
i
]
[
"val"
]
=
blue
+
green
+
red
EndFor
EndFor
'set up for sorting
arrlen
=
i
GraphicsWindow
.
BrushColor
=
"black"
title
=
"Sorting algorithm efficiency comparison"
GraphicsWindow
.
DrawText
(
offsetx
,
offsety
,
title
)
arrsizetext
=
"Size of array = "
+
(
arrlen
+
1
)
GraphicsWindow
.
DrawText
(
offsetx
,
offsety
+
0.5
*
size
,
arrsizetext
)
GraphicsWindow
.
DrawText
(
offsetx
,
offsety
+
2
*
size
,
"Bubble Sort:"
)
start
=
Clock
.
ElapsedMilliseconds
bubblesort
(
)
bubtime
=
Clock
.
ElapsedMilliseconds
-
start
bubtext
=
"Elapsed time = "
+
bubtime
/
1000
+
" seconds"
GraphicsWindow
.
DrawText
(
offsetx
+
100
,
offsety
+
2
*
size
,
bubtext
)
GraphicsWindow
.
DrawText
(
offsetx
,
offsety
+
3
*
size
,
"Insertion Sort:"
)
start
=
Clock
.
ElapsedMilliseconds
insertionsort
(
)
instime
=
Clock
.
ElapsedMilliseconds
-
start
instext
=
"Elapsed time = "
+
instime
/
1000
+
" seconds"
GraphicsWindow
.
DrawText
(
offsetx
+
100
,
offsety
+
3
*
size
,
instext
)
GraphicsWindow
.
DrawText
(
offsetx
,
offsety
+
4
*
size
,
"Shell Sort:"
)
start
=
Clock
.
ElapsedMilliseconds
shellsort
(
)
shelltime
=
Clock
.
ElapsedMilliseconds
-
start
shelltext
=
"Elapsed time = "
+
shelltime
/
1000
+
" seconds"
GraphicsWindow
.
DrawText
(
offsetx
+
100
,
offsety
+
4
*
size
,
shelltext
)
GraphicsWindow
.
DrawText
(
offsetx
,
offsety
+
6
*
size
,
"Program ended."
)
Sub
shellsort
inc
=
Math
.
Round
(
arrlen
/
2
)
While
inc
>
0
For
i
=
inc
To
arrlen
temp
=
boxes3
[
i
]
[
"val"
]
tempbox
=
boxes3
[
i
]
[
"obj"
]
j
=
i
while
(
j
>=
inc
)
and
(
boxes3
[
j
-
inc
]
[
"val"
]
>
temp
)
boxes3
[
j
]
[
"val"
]
=
boxes3
[
j
-
inc
]
[
"val"
]
boxes3
[
j
]
[
"obj"
]
=
boxes3
[
j
-
inc
]
[
"obj"
]
r
=
Math
.
Floor
(
(
j
)
/
columns
)
c
=
Math
.
Remainder
(
j
,
columns
)
Shapes
.
Move
(
boxes3
[
j
]
[
"obj"
]
,
c
*
size
,
r
*
size
+
offsety
)
j
=
j
-
inc
EndWhile
boxes3
[
j
]
[
"val"
]
=
temp
boxes3
[
j
]
[
"obj"
]
=
tempbox
r
=
Math
.
Floor
(
(
j
)
/
columns
)
c
=
Math
.
Remainder
(
j
,
columns
)
Shapes
.
Move
(
boxes3
[
j
]
[
"obj"
]
,
c
*
size
,
r
*
size
+
offsety
)
EndFor
inc
=
Math
.
Round
(
inc
/
2.2
)
Endwhile
Endsub
Sub
insertionsort
For
i
=
1
to
arrlen
value
=
boxes2
[
i
]
[
"val"
]
boxtemp
=
boxes2
[
i
]
[
"obj"
]
j
=
i
-
1
done
=
"false"
While
done
=
"false"
If
boxes2
[
j
]
[
"val"
]
>
value
then
boxes2
[
j
+
1
]
[
"val"
]
=
boxes2
[
j
]
[
"val"
]
boxes2
[
j
+
1
]
[
"obj"
]
=
boxes2
[
j
]
[
"obj"
]
r
=
Math
.
Floor
(
(
j
+
1
)
/
columns
)
c
=
Math
.
Remainder
(
j
+
1
,
columns
)
Shapes
.
Move
(
boxes2
[
j
+
1
]
[
"obj"
]
,
c
*
size
+
offsetx
,
r
*
size
)
j
=
j
-
1
If
j
<
0
then
done
=
"true"
EndIf
Else
done
=
"true"
EndIf
'Program.Delay(10)
EndWhile
boxes2
[
j
+
1
]
[
"val"
]
=
value
boxes2
[
j
+
1
]
[
"obj"
]
=
boxtemp
r
=
Math
.
Floor
(
(
j
+
1
)
/
columns
)
c
=
Math
.
Remainder
(
j
+
1
,
columns
)
Shapes
.
Move
(
boxes2
[
j
+
1
]
[
"obj"
]
,
c
*
size
+
offsetx
,
r
*
size
)
EndFor
Endsub
Sub
bubblesort
imax
=
arrlen
'highval = boxes[1]["val"]
swapped
=
"true"
While
swapped
=
"true"
swapped
=
"false"
For
bubi
=
1
To
imax
If
boxes
[
bubi
]
[
"val"
]
<
boxes
[
bubi
-
1
]
[
"val"
]
Then
swap
(
)
EndIf
'Program.Delay(10)
Endfor
imax
=
imax
-
1
Endwhile
EndSub
Sub
swap
boxtemp
=
boxes
[
bubi
-
1
]
[
"obj"
]
boxtempval
=
boxes
[
bubi
-
1
]
[
"val"
]
boxes
[
bubi
-
1
]
[
"obj"
]
=
boxes
[
bubi
]
[
"obj"
]
boxes
[
bubi
-
1
]
[
"val"
]
=
boxes
[
bubi
]
[
"val"
]
boxes
[
bubi
]
[
"obj"
]
=
boxtemp
boxes
[
bubi
]
[
"val"
]
=
boxtempval
'highval=boxes[i]["val"]
r
=
Math
.
Floor
(
(
bubi
-
1
)
/
columns
)
c
=
Math
.
Remainder
(
bubi
-
1
,
columns
)
Shapes
.
Move
(
boxes
[
bubi
-
1
]
[
"obj"
]
,
c
*
size
,
r
*
size
)
r
=
Math
.
Floor
(
(
bubi
)
/
columns
)
c
=
Math
.
Remainder
(
bubi
,
columns
)
Shapes
.
Move
(
boxes
[
bubi
]
[
"obj"
]
,
c
*
size
,
r
*
size
)
swapped
=
"true"
Endsub
Copyright (c) Microsoft Corporation. All rights reserved.