function merge(A, p, q, r) local n1 = q - p + 1 local n2 = r - q local L = {} local R = {} for i = 1, n1 do L[i] = A[p + i - 1] end for j = 1, n2 do R[j] = A[q + j] end local i, j = 1, 1 local k = p for k = p, r do local ln = L[i] local rn = R[j] if ln == nil then while j <= n2 do A[k] = R[j] j = j + 1 k = k + 1 end elseif rn == nil then while i <= n1 do A[k] = L[i] i = i + 1 k = k + 1 end else if ln <= rn then A[k] = ln i = i + 1 else A[k] = rn j = j + 1 end end end end function merge_sort(A, p, r) if p < r then local q = math.floor((p + r) / 2) merge_sort(A, p, q) merge_sort(A, q + 1, r) merge(A, p, q, r) end end
C = {12, 312, 465, 54, 2, 78, 32, 123, 4353, 21, 341, 3, 54, 534, 53, 645, 6, 7, 654, 345, 6, 4667, 65, 678} merge_sort(C, 1, #C) print(unpack(C))
从零开始读算法导论第三版 归并排序 LUA实现
最新推荐文章于 2024-08-23 17:49:22 发布