基本的なマージソートを書いて Lua を学ぼうとしていますが、マージソートにも慣れていないため、いくつかの問題に遭遇しました。
コード:
arr = {}
status = 0
function return_first_half (list)
size = #list
size = size / 2
t = {}
for var = 1, size, 2 do
t[var] = list[var]
end
return t
end
function return_last_half (list)
size = #list
i = size / 2
t = {}
for var = size, i, -1 do
t[var] = list[var]
end
return t
end
function msort (list)
size = #list
first_half = {}
last_half = {}
if (size <= 1) then
return list
end
first_half = msort(return_first_half(list))
last_half = msort(return_last_half(list))
if (#first_half == 1) then
if (#last_half == 1) then
if (first_half[1] > last_half[1]) then
arr[status] = first_half[1]
status = status + 1
arr[status] = last_half[1]
status = status + 1
end
if (first_half[1] < last_half[1])then
arr[status] = last_half[1]
status = status + 1
arr[status] = first_half[1]
status = status + 1
end
end
end
end
function main ()
list = {}
for i = 1, 8, 1 do
list[i] = io.read()
end
msort(list)
for i = 1, #arr, 1 do
print (arr[i])
end
end
main()
入力8を1に降ろすと、nilが出力されて終了します。何か助けはありますか?
編集: 配列の長さとアドレスに関する問題を修正し、次の行でスタック オーバーフローを返すようになりました:
first_half = msort(return_first_half(list))