57 lines
881 B
Plaintext
57 lines
881 B
Plaintext
export sub shell_sort(x())
|
|
// Shell sort based on insertion sort
|
|
|
|
local gap, i, j, first, last, tempi, tempj
|
|
|
|
last = arraysize(x(),1)
|
|
gap = int(last / 10) + 1
|
|
while(TRUE)
|
|
first = gap + 1
|
|
for i = first to last
|
|
tempi = x(i)
|
|
j = i - gap
|
|
while(TRUE)
|
|
tempj = x(j)
|
|
if tempi >= tempj then
|
|
j = j + gap
|
|
break
|
|
end if
|
|
x(j+gap) = tempj
|
|
if j <= gap then
|
|
break
|
|
end if
|
|
j = j - gap
|
|
wend
|
|
x(j) = tempi
|
|
next i
|
|
if gap = 1 then
|
|
return
|
|
else
|
|
gap = int(gap / 3.5) + 1
|
|
end if
|
|
wend
|
|
end sub
|
|
|
|
if peek$("library") = "main" then
|
|
|
|
clear screen
|
|
|
|
ITEMS = 100
|
|
dim numeros(ITEMS)
|
|
|
|
for n = 1 to ITEMS
|
|
numeros(n) = ran(ITEMS + 1)
|
|
next n
|
|
|
|
print time$
|
|
shell_sort(numeros())
|
|
print time$
|
|
print "Press a key to see ordered numbers."
|
|
inkey$
|
|
|
|
for n = 1 to ITEMS
|
|
print numeros(n),", ";
|
|
next n
|
|
|
|
end if
|