我正在努力理解合并排序程序。为了理解,我编写了该程序,但无法理解输出。如果有人解释输出,这将非常有帮助。我直到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
答案 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;
}