Int = function (number)
return math.floor(number)
end
function merge(a,left,mid,right)
local i,j,k= left,mid+1,1
local b = {}
while (i<=mid and j<=right) do
if a[i]<a[j] then
b[k]= a[i]
i = i + 1
else
b[k] = a[j]
j = j + 1
end
k = k + 1
end
while i<=mid do
b[k]= a[i]
i = i + 1
k = k + 1
end
while j<=right do
b[k] = a[j]
j = j + 1
k = k + 1
end
for m =1 ,k - 1 do
a[left] = b[m]
left = left + 1
end
end
--分治
function mergesort(a,left,right)
if(right - left >=1) then
--分
local mid=Int((left+right)/2)
mergesort(a,left,mid)
mergesort(a,mid+1,right)
--合
merge(a,left,mid,right)
end
end
--example
t = {9,8,7,6,5,4}
mergesort(t,1,#t)
for k,v in ipairs(t) do
print(k,v)
end
归并排序实Lua实现
最新推荐文章于 2023-09-03 20:36:33 发布