Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Lua中的合并函数_Sorting_Merge_Lua - Fatal编程技术网

Sorting Lua中的合并函数

Sorting Lua中的合并函数,sorting,merge,lua,Sorting,Merge,Lua,嘿,我正试图在Lua中实现merge sort中的merge函数。我对算法很了解,但我对Lua是新手。我不断得到一个“错误的参数#1到'insert'(表应为零)”,我相信错误指向我的递归调用。我搞不懂,我觉得这是件很琐碎的事。我只需要一个Lua大师给我一些指导。谢谢以下是我的功能: function merge(l1, l2) if # l1 == 0 then return l2 elseif # l2 == 0 then return l1 else if l

嘿,我正试图在Lua中实现merge sort中的merge函数。我对算法很了解,但我对Lua是新手。我不断得到一个“错误的参数#1到'insert'(表应为零)”,我相信错误指向我的递归调用。我搞不懂,我觉得这是件很琐碎的事。我只需要一个Lua大师给我一些指导。谢谢以下是我的功能:

function merge(l1, l2)
if # l1 == 0 then
    return l2
elseif # l2 == 0    then
    return l1
else
    if l1[1] <= l2[1] then
        tmp = l1[1]
        table.remove(l1,1)
        return table.insert(merge(l1,l2),tmp)

    else 
        tmp = l2[1]
        table.remove(l2,1)
        return table.insert(merge(l1,l2),tmp)
    end
end
end
函数合并(l1、l2)
如果#l1==0,则
返回l2
elseif#l2==0那么
返回l1
其他的

如果l1[1]我不能完全确定使用
merge
函数想要实现什么,但一个明显的问题是
table.insert
不返回表,它返回
nil

使用
table将合并结果存储在表
t
中。在
t
上插入
,最后返回
t
似乎不像以前那样中断

function merge(l1, l2) 
    if #l1 == 0 then
        return l2
    elseif # l2 == 0 then
        return l1
    else
        if l1[1] <= l2[1] then
            local tmp = table.remove(l1, 1)
            local t = merge(l1, l2) 
            table.insert(t, tmp)
            return t
        else 
            local tmp = table.remove(l2, 1)
            local t = merge(l1, l2) 
            table.insert(t, tmp)
            return t
        end 
    end 
end
函数合并(l1、l2)
如果#l1==0,则
返回l2
elseif#l2==0那么
返回l1
其他的

如果l1[1]嘿。谢谢你的提示!它工作得很好!merge函数获取两个已排序的表,并将它们合并到一个已排序的表中。我必须更改表格。将(t,tmp)插入表格。插入(t,1,tmp)以便在返回表格的开头插入项目。Mike K,我想你忘了将ponzao的答案标记为正确。