--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-07-04 15:43:52 发布