Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Thuật toán Merge (Hợp nhất) trong cấu trúc dữ liệu


Thuật toán Merge dùng để hợp nhất hai danh sách đã sắp xếp thành một danh sách. Dùng trong Merge Sort để hợp nhất các danh sách con đã sắp xếp thành danh sách lớn hơn.

Cách tiếp cận đơn giản: hai danh sách, hai con trỏ. Con trỏ 1 trỏ phần tử danh sách 1, con trỏ 2 trỏ danh sách 2. So sánh giá trị, lấy phần tử nhỏ hơn, tăng con trỏ danh sách đó. Lặp cho đến khi một danh sách hết. Sau đó nối phần còn lại của danh sách kia vào cuối.

Minh họa:

Thuật toán Merge (Hợp nhất) trong cấu trúc dữ liệu

Thuật toán

Merge(array, left, middle, right) −

Begin
    nLeft := m - left + 1
    nRight := right - m
    define arrays leftArr, rightArr size nLeft, nRight
    for i := 0 to nLeft do
        leftArr[i] := array[left + i]
    done
    for j := 0 to nRight do
        rightArr[j] := array[middle + j + 1]
    done
    i := 0, j := 0, k := left
    while i < nLeft AND j < nRight do
        if leftArr[i] <= rightArr[j] then
            array[k] = leftArr[i]
            i := i+1
        else
            array[k] = rightArr[j]
            j := j+1
        k := k+1
    done
    while i < nLeft do
        array[k] := leftArr[i]
        i := i+1; k := k+1
    done
    while j < nRight do
        array[k] := rightArr[j]
        j := j+1; k := k+1
    done
End