Lua实现的快速排序不正确

最近我在学习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开始的错误理解,但我无法确定我错在哪里。你能告诉我我错在哪里吗?谢谢。

点赞
用户8737221
用户8737221

我通过直接修改给定表格并通过范围值作为参数传递,并发布了快速排序的代码,代码如下:

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
2018-11-23 09:27:23