关于MergeSort
来源:3-2 归并排序法的实现
weixin_慕设计6333414
2021-05-24
老师您好,为什么要写void MergeSort(int arr[], int n)这一步呢?
我们直接调用void __mergeSort(int arr[], int l, int r)不更简化吗?直接传数组名,数组的左值和右值即可。
写回答
1回答
-
liuyubobobo
2021-05-25
首先,逻辑上是可以的。
但是,void MergeSort(int arr[], int n) ,一方面,对用户是更友好的;因为少一个参数。甚至,如果我们设计的接口数组传入是 vector<int> 的话,连 n 都不用传。当然,设计是主观的,这一点你可以 argue。
另一方面,如果我们在递归前,需要做一些初始化的工作,也可以在这里做。最典型的,对于 merge sort,有一个优化,就是将 merge 中开的辅助空间放在外面,整个 merge sort 过程只开一次辅助空间。当做这个优化的时候,这样设计的优势就能体现出来了。
关于这个优化的参考代码,可以参考这里:https://git.imooc.com/coding-71/coding-71/src/master/03-Sorting-Advance/Course%20Code%20%28C++%29/Optional-01-MergeSort-Create-aux-Array-Out-of-Merge/MergeSort2.h
继续加油!:)
00
相似问题