阿摩線上測驗 登入

申論題資訊

試卷:111年 - 111 地方政府特種考試_四等_統計、資訊處理:資料處理概要#112599
科目:資料處理
年份:111年
排序:0

題組內容

一、設M與N分別含有m及n個元素之兩個數列陣列。

申論題內容

(一)試設計一演算法Sort(M,N,P,m,n) ,將M與N內之元素,合併成一個新陣列P。合併後P內之元素需依小而大排序;該演算法的執行時間需最佳。 (15分)

詳解 (共 1 筆)

詳解 提供者:hchungw
要將兩個已排序的數列M和N合併成一個新的已排序數列P,並使合併後的數列依小到大排序,可以使用合併排序(Merge Sort)中的合併(Merge)步驟。該步驟的執行時間為O(m + n),是最佳的時間複雜度。
 
python
      
        
def sort(M, N, m, n):
    # 創建一個新的列表P來存放合併後的結果
    P = [0] * (m + n)
    
    i = 0  # M的指標
    j = 0  # N的指標
    k = 0  # P的指標
    # 合併兩個已排序數列
    while i < m and j < n:
        if M[i] <= N[j]:
            P[k] = M[i]
            i += 1
        else:
            P[k] = N[j]
            j += 1
        k += 1
    # 將M中剩餘的元素加入P
    while i < m:
        P[k] = M[i]
        i += 1
        k += 1
    # 將N中剩餘的元素加入P
    while j < n:
        P[k] = N[j]
        j += 1
        k += 1
    return P
# 範例使用
M = [1, 3, 5, 7]
N = [2, 4, 6, 8]
m = len(M)
n = len(N)
P = sort(M, N, m, n)
print("合併後的數列P:", P)

演算法說明
初始設置:創建一個大小為 m + n 的新陣列 P 來存放合併後的結果,並初始化指標 i、j 和 k 分別指向 M、N 和 P 的起始位置。
合併步驟:在 M 和 N 中進行比較,將較小的元素放入 P 中,然後移動對應的指標。重複此步驟直到其中一個數列到達末尾。
處理剩餘元素:將 M 或 N 中剩餘的元素依次放入 P 中。
返回結果:返回合併後的已排序數列 P。
時間複雜度
該演算法的時間複雜度為O(m + n),這是因為每個元素最多被處理一次,因此該算法是最佳的合併排序方法。