Lua创建的快速排序无法正常工作

时间:2018-11-23 05:37:56

标签: algorithm lua quicksort

我是最近一直在学习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开始犯了一个错误,但我不知道哪里错了。你能告诉我哪里错了吗?谢谢。

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