If you ever need to sort a table of numbers in shiva, I adapted this Rosetta Code entry for shiva.
-- Adapted from http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Lua
function quicksort (t, start, endi)
start = start or 0
endi = endi or table.getSize ( t ) - 1
if(endi - start < 1) then return t end
local pivot = start
for i = start + 1, endi do
if table.getAt ( t, i ) <= table.getAt ( t, pivot ) then
local temp = table.getAt ( t, pivot + 1 )
table.setAt ( t, pivot + 1, table.getAt ( t, pivot ) )
if(i == pivot + 1) then
table.setAt ( t, pivot, temp )
else
table.setAt ( t, pivot, table.getAt ( t, i ) )
table.setAt ( t, i, temp )
end
pivot = pivot + 1
end
end
t = quicksort(t, start, pivot - 1)
return quicksort(t, pivot + 1, endi)
end
The following code:
local tTest = table.newInstance ( )
table.add ( tTest, 1)
table.add ( tTest, 9)
table.add ( tTest, 7)
table.add ( tTest, 3)
table.add ( tTest, 5)
table.add ( tTest, 10)
table.add ( tTest, 6)
table.add ( tTest, -5)
table.add ( tTest, -9)
table.add ( tTest, -15)
table.add ( tTest, 33)
table.add ( tTest, 4)
table.add ( tTest, 8)
this.quicksort (tTest)
for i = 0, table.getSize ( tTest) - 1 do
log.message ( table.getAt ( tTest, i ) )
end
Produces the output:
-15 -9 -5 1 3 4 5 6 7 8 9 10 33
Be the first to comment