关于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


继续加油!:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程