我是最近一直在学习Lua的人。我正在Lua中编写QuickSort。我已经将用Go语言编写的快速排序代码翻译成Lua,下面是该代码。 Table.slice函数定义了在QuickSort中进行递归调用时使用的函数。
function table.slice(tbl, first, last, step)
local sliced = {}
for i = first , last , step do
sliced[#sliced+1] = tbl[i]
end
return sliced
end
function quickSort(array)
if #array < 2 then
return array
end
local left = 1
local right = #array
local pivot = math.random( 1, #array )
array[pivot], array[right] = array[right], array[pivot]
for i = 1, #array do
if array[i] > array[right] then
array[left], array[i] = array[i], array[left]
left = left + 1
end
end
array[left], array[right] = array[right], array[left]
a = table.slice(array,1,left-1,1)
b = table.slice(array,left+1,#array,1)
quickSort(a)
quickSort(b)
return array
end
起初我以为我对Lua的表索引从1开始犯了一个错误,但我不知道哪里错了。你能告诉我哪里错了吗?谢谢。
答案 0 :(得分:0)
我修改了代码,方法是直接修改给定的表,方法是将范围值和注释一起传递给参数,然后发布代码以进行快速排序。
function quickSort(array, le, ri)
if ri-le < 1 then
return array
end
local left = le
local right = ri
local pivot = math.random( le, ri )
array[pivot], array[right] = array[right], array[pivot]
for i = le, ri do
if array[i] > array[right] then
array[left], array[i] = array[i], array[left]
left = left + 1
end
end
array[left], array[right] = array[right], array[left]
quickSort(array, 1, left-1)
quickSort(array, left +1, ri)
return array
end