千万级数组的MergeSort发生了溢出的解决方案

来源:3-2 归并排序法的实现

HuberyWang

2020-07-18

老师,我想问下您,对于如果需要排序的数组达到了千万的级别,应该怎么处理您所说的那个int数据类型不够使用的细节问题呢?
如图,我用的是vs code,一百万还没啥问题,一千万和五百万就出问题了。在网上找了关于segmentation fault报错原因就可能是内存溢出问题
图片描述

写回答

3回答

liuyubobobo

2020-07-19

这个溢出应该不是 int 型溢出的问题,而是每次都在 merge 中开空间导致的。解决方案是不要把临时空间放在 merge 中每次开空间,而是在 mergeSort 递归调用前统一开一次临时空间,以参数的形式传给 merge 使用。


具体可以参考这个课程我提供的补充代码: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
1
HuberyWang
非常感谢!
2020-07-19
共1条回复

HuberyWang

提问者

2020-07-18

写错了。应该是您说的(l+r)/2中l与r相加可能溢出的问题如何解决

0
0

HuberyWang

提问者

2020-07-18

是不是把int型改成long型呢

0
0

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

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

11187 学习 · 1614 问题

查看课程