我不明白 merge_sort 排序算法和函数调用的递归实现
i didn't understand the recursive implementation of merge_sort sorting algorithm and the function calls
这是一个用C语言实现的函数mergeSort,当我们在第5行和第6行递归调用函数merge_sort时,它们并行工作或者第一个完成工作,其余代码行已暂停? , 那第 8 行呢,它也和它们并行工作?
1- void mergeSort(int arr[], int l, int r)
2- {
3-if (l < r) {
4 - int m = l + (r - l) / 2;
5 - // Sort first and second halves
6 - mergeSort(arr, l, m);
7 - mergeSort(arr, m + 1, r);
8 - merge(arr, l, m, r);
}
}
所有程序逐行执行。除非您执行多线程,否则您的代码显然没有执行多线程,否则不会有任何并行机制。
第5行将在第4行之后执行
第6行将在第5行之后执行
第7行将在第6行之后执行
第 8 行将在第 7 行之后执行
如果你不相信代码实际上是一行一行执行的。这里我举个例子。
// a recursive function, like mergeSort
void print(int i, int j) {
printf("%d %d\n", i, j);
if (j > 0) print(i, j - 1);
}
int main() {
print(1, 2);
print(2, 2);
return 0;
}
输出:
1 2
1 1
1 0
2 2
2 1
2 0
现在很清楚 print(1, 2) 在 print(2, 2)
之前得到 完全 执行
这是一个用C语言实现的函数mergeSort,当我们在第5行和第6行递归调用函数merge_sort时,它们并行工作或者第一个完成工作,其余代码行已暂停? , 那第 8 行呢,它也和它们并行工作?
1- void mergeSort(int arr[], int l, int r)
2- {
3-if (l < r) {
4 - int m = l + (r - l) / 2;
5 - // Sort first and second halves
6 - mergeSort(arr, l, m);
7 - mergeSort(arr, m + 1, r);
8 - merge(arr, l, m, r);
}
}
所有程序逐行执行。除非您执行多线程,否则您的代码显然没有执行多线程,否则不会有任何并行机制。
第5行将在第4行之后执行
第6行将在第5行之后执行
第7行将在第6行之后执行
第 8 行将在第 7 行之后执行
如果你不相信代码实际上是一行一行执行的。这里我举个例子。
// a recursive function, like mergeSort
void print(int i, int j) {
printf("%d %d\n", i, j);
if (j > 0) print(i, j - 1);
}
int main() {
print(1, 2);
print(2, 2);
return 0;
}
输出:
1 2
1 1
1 0
2 2
2 1
2 0
现在很清楚 print(1, 2) 在 print(2, 2)
之前得到 完全 执行