1. 程式人生 > >演算法導論自做2.3-2

演算法導論自做2.3-2

題目:
改寫MERGE過程,使之不使用哨兵元素,而是一旦在陣列L或陣列R中的所有元素都被複制回陣列A後,就立即停止,再將另一個數組中餘下的元素複製回陣列A中。

答案:

void Merge(int A[], int p, int q, int r)
{
    int n1 = q - p + 1;
    int n2 = r - q;
    int L[10];
    int R[10];
    int j = 0, k = 0;
    int count_L = n1;
    int count_R = n2;

    for (int i = 0; i < n1; i++)
    {
        L[i] = A[i + p];
    }

    for
(int i = 0; i < n1; i++) { R[i] = A[i + q + 1]; } for (int i = p; i < r + 1; i++) { if (count_L != 0 && count_R != 0) { if (L[j] < R[k]) { A[i] = L[j]; ++j; --count_L; } else
{ A[i] = R[k]; ++k; --count_R; } } else if (count_L == 0 && count_R != 0) { A[i] = R[k]; ++k; --count_R; } else if (count_L != 0 && count_R == 0
) { A[i] = L[j]; ++j; --count_L; } } }