簡體   English   中英

合並排序和合並 C++

[英]MergeSort and Merge C++

在我的學校作業中,我的MergeSort()Merge()有問題。 我是 C++ 的新手(我已經輟學兩年了,他們用新課程改變了我的專業。我正在學習 java ......)長話短說,我的Merge()MergeSort()函數不起作用在我調試它們時在 VS Code 中。 我在使用 function 時遇到問題。 我不知道我是否正確傳遞了參數。

我試圖通過將Merge() function 向上移動來更改 MergeSort MergeSort()

void Merge(int B[], int &lStart, int &lEnd, int &rStart, int &rEnd) {
    int length;
    int temp[length];
    int theSaved = lStart;
    int i = lStart;

    while (lStart < lEnd && rStart <= rEnd) {
        if (B[lStart] < B[rStart]) {
            temp[i++] = B[lStart++];
        }

        else {
            temp[i++] = B[rStart++];
        }
    }

    while (lStart <= lEnd) {
        temp[i++] = B[lStart++];
    }

    while (rStart <= rEnd) {
        temp[i++] = B[rStart++];
    }

    for (int j = theSaved; j < rEnd; j++) {
        B[j] = temp[j];
    }
}

void MergeSort(int B[], int start, int end) {
    int middle;
    int theMiddle = middle + 1;
    if (start < end) {
        middle = (start + end) / 2;
        MergeSort(B, start, middle);
        MergeSort(B, middle + 1, end);
        Merge(B, start, middle, theMiddle, end);
    }
}

int main() {
    int length = 7;
    int begin = 0;
    int end = (length - 1);
    int B[length] = {10, 50, 90, 60, 5, 20, 40};

    for (int i = 0; i < length; i++) {
        MergeSort(B, begin, end);
        cout << "\n" << B[i];
    }
    return 0;
}

我只是想了解發生了什么。 我試圖在邏輯上做到這一點,但結果太混亂了。 output 應該是 5,10,20,40,50,60,90

merge() 不應該通過引用來獲取參數,使用 int lStart 而不是 int &lStart。 rStart 將始終為 lEnd + 1,因此合並只需要 3 個參數。 合並中的 if 應該是 lStart <= lEnd。

雖然不是問題,但如果 main 的初始調用是 MergeSort(B, 0, length),則代碼會更簡單一些。 然后可以使用 (B, start, middle, end) 調用 Merge。 merge() 中的循環將具有... lStart < middle... rStart < end... 對於循環和 if 語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM