试图了解合并排序程序

时间:2019-06-09 14:30:25

标签: c++ mergesort

我正在努力理解合并排序程序。为了理解,我编写了该程序,但无法理解输出。如果有人解释输出,这将非常有帮助。我直到mid=0才了解。

 #include <iostream>

 using namespace std;

 void check(int c, int d) {
     cout << "C=" << c << " D=" << d << endl;

     if (c < d) {
         int mid = (c + d) / 2;
         cout << "mid=" << mid << endl;
         check(c, mid);
         check(mid + 1, d);
     }
}

int main() {
    // int a[12] = { 2, 3, 1, 6, 9, 112, 113, 224, 225, 226, 332, 2303 };

    check(0, 5);
    return 0;
}

输出:

C=0 D=5
mid=2
C=0 D=2
mid=1
C=0 D=1
mid=0
C=0 D=0
C=1 D=1
C=2 D=2
C=3 D=5
mid=4
C=3 D=4
mid=3
C=3 D=3
C=4 D=4
C=5 D=5

1 个答案:

答案 0 :(得分:0)

请注意,这是基于自上而下的合并排序的,这种排序在学习中很流行,但是大多数库改用自下而上的合并排序。就输出而言,自上而下的合并排序将生成索引并将索引推入堆栈,从而导致深度优先,顺序优先。在生成2个大小为1的行之前,不会进行合并。我更改了代码以显示递归级别 l 以及递归调用是第一个还是第二个 x

if(Mathf.Round(PlayerPrefs.GetFloat("finalScore")) < PlayerPrefs.GetInt("hs",0)){

这是输出:

#include <iostream>

using namespace std;

void check(int c, int d, int l, int x) {
    if(c >= d){
        cout << "l = " << l << "  x = " << x;
        cout << "  c = " << c << "         d = " << d << endl;
        return;
    }
    int m = (c + d) / 2;
    cout << "l = " << l << "  x = " << x;
    cout << "  c = " << c << "  m = " << m << "  d = " << d << endl;
    check(c, m, l+1, 1);
    check(m + 1, d, l+1, 2);
}

int main() {
    check(0, 5, 0, 0);
    return 0;
}