从零开始读算法导论第三版 归并排序 LUA实现

来源:互联网 发布:航天税控开票软件 编辑:程序博客网 时间:2024/06/06 12:53
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    endendfunction 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)    endend
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))


原创粉丝点击