C++ 快速排序排10000个数据的时候栈溢出了,请高手指点一下怎么改

jack_leiwin 2013-05-02 07:39:23

void sort(CMetric* metric,vector<CIndexObject*> &arr,CIndexObject* pivot, int fromIndex, int toIndex)
{
int i=fromIndex, j=toIndex;

CIndexObject *temp = arr[fromIndex];
double tempDistance=metric->getDistance(temp,pivot);

if ( fromIndex < toIndex )
{
while( i < j )
{
while( i<j && tempDistance<= metric->getDistance(arr[j],pivot))
{
j --;
}
if (i<j)
{
arr[i++] = arr[j];
}
while( i<j && metric->getDistance(arr[i],pivot) <= tempDistance)
{
i++;
}
if (i<j)
{
arr[j--] = arr[i];
}
}
arr[i] = temp;
sort(metric,arr,pivot,fromIndex, i-1);
sort(metric,arr,pivot,i+1,toIndex);
}
}

在第二十行出现了如下问题

是什么情况导致的啊?arr.size=800的时候没有问题,等于900 的时候出错了!是有什么东西用的不合理吗?很消耗栈空间吗?非常感谢!
...全文
344 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mLee79 2013-05-02
  • 打赏
  • 举报
回复
在数据基本有序的情况下, 这种处理的不好的快排递归深度会达到O(N), 正常的做法是长的数组递归(一般顺便也把递归给优化成递推了), 短的一部分做尾递归优化, 这样的递归深度最大是O(lnN), 肯定不会溢出. 不过你900的规模就会栈溢出实在是无法理解, 看来是M$的DEBUG版本加了太多料用来检测溢出啥的...
zybjtu 2013-05-02
  • 打赏
  • 举报
回复
c++一个进程的栈空间是有限的,重复递归当然造成溢出

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧