原地歸併的抽象方法

歸併排序(MERGE-SORT)是建立在歸併操作上的一種有效的排序算法,該算法是採用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合併成一個有序表,稱爲二路歸併。歸併排序是一種穩定的排序方法。

原地歸併的抽象方法

    local function merge(a,low,mid,hi)
        local aux = {}
        local i = low
        local j = mid + 1
        for ii,v in ipairs(a) do
            aux[ii] = v
        end
        for k = low,hi do
            if i > mid then
                a[k] = aux[j]
                j = j + 1
            elseif j > hi then
                a[k] = aux[i]
                i = i + 1
            elseif aux[j] < aux[i] then
                a[k] = aux[j]
                j = j + 1
            else
                a[k] = aux[i]
                i = i + 1
            end
        end
        for i,v in ipairs(a) do
            print("num====",v)
        end
    end
    local tab = {2,6,8,10,11,1,3,4,12,20}
    merge(tab,1,#tab/2,#tab)

該方法首先將所有元素複製到aux[]中,然後再歸併回a[],方法在燴餅時進行四個判斷:左半邊用盡(取右半邊元素)、右半邊用盡(取左半邊元素)、右半邊的當前元素小於左半邊的當前元素(取右半邊的元素)及右半邊當前元素大於左半邊的當前元素(取左半邊的元素)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章