--merge sort
local function printArray(a)
for i=1, #a do
print(a[i]);
end
end
local function divide(a)
local b = {};
local c = {};
local n = math.floor( #a/2);
for i=1, n do
b[i] = a[i];
end
for i=n+1, #a do
c[i - n] = a[i];
end
return b, c;
end
local mergesort;
mergesort = function (inarray)
-- printArray(inarray)
-- if #inarray >=1 then
-- print(#inarray)
-- end
if #inarray <= 1 then
return inarray;
end
local a,b = divide(inarray)
a = mergesort(a);
b = mergesort(b);
--merge
local i = 1;
local j = 1;
local c = {};
while a[i] and b[j] do
if a[i] < b[j] then
c[i + j - 1] = a[i];
i = i+1;
else
c[i + j - 1] = b[j];
j = j+1;
end
end
while a[i] do
c[i+j-1] = a[i];
i=i+1
end
while b[j] do
c[i+j-1] = b[j];
j=j+1
end
return c;
end
array = {
sort = mergesort,
out = printArray,
}
--test program
testarray = {12, 2, 4, 54, 67, 32 , 11, 1, 4, 45, 666}
sortres = array.sort(testarray)
array.out(testarray)
print("sorted:")
array.out(sortres)
lua --- merge sort
最新推荐文章于 2021-06-01 19:16:55 发布
本文介绍了一种使用Lua语言实现的归并排序算法,并通过一个示例程序展示了如何定义和调用该排序函数。该算法首先将数组分成两部分进行递归排序,然后将两个已排序的部分合并为一个有序数组。
545

被折叠的 条评论
为什么被折叠?



