求助快速排序算法,0xC00000FD: Stack overflow (参数: 0x00000001, 0x00282F9C)。

dbdxliudiwen 2014-04-21 12:24:12
0x00191879 处的第一机会异常(在 QuickSort.exe 中):
0xC00000FD: Stack overflow (参数: 0x00000001, 0x00282F9C)。
如有适用于此异常的处理程序,该程序便可安全地继续运行。

//快速排序算法,不知道什么原因,我的代码只能对没有排好序的数组排序
// 而对于已经排好序的数组,int a[MAX_SIZE],如果定义比MAX_SIZE较小的时候,调用Quick_Sort函数是没有问题的,但是如果定义MAX_SIZE比较大,那么程序就会出现上述错误

#include <iostream>
#include <iomanip>
using namespace std;

#define MAX_SIZE 10000
template<typename T>
void Quick_Sort(T *a, int left, int right);

int main()
{

int array[MAX_SIZE];
for(int i=0; i<MAX_SIZE; i++)
array[i]= i;
Quick_Sort( array, 0, MAX_SIZE-1);

system("pause");
return 0;
}

template<typename T>
void Quick_Sort(T *a, int left, int right)
{
int i=left, j=right;
T base= *(a+left);
if(right<=left)
return ;
while( i< j)
{
while(i< j && *(a+j )>= base )
j--;
if(i<j)
*(a+i)= *(a+j);
while(i< j && *(a+i)<=base )
i++;
if(i<j)
*(a+j)= *(a+i);
}

if(i==j)
*(a+i)= base;
Quick_Sort( a, left, i-1 );
Quick_Sort( a, i+1, right);
}


...全文
745 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbdxliudiwen 2014-04-24
  • 打赏
  • 举报
回复
什么排版??
toberich 2014-04-23
  • 打赏
  • 举报
回复
排版都不会?
dbdxliudiwen 2014-04-22
  • 打赏
  • 举报
回复
这完全是一样的算法和递归次数,一个有stack overflow,另一个却不会出现这种情况
dbdxliudiwen 2014-04-22
  • 打赏
  • 举报
回复
可是我调用下面这个函数却不会出现这个情况,请问能帮我解释下么 void qsort(int v[], int left, int right) { int i, last; void swap(int v[], int i, int j); if (left >= right) return; last = left; for (i = left + 1; i <= right; i++) if (v[i] < v[left]) swap(v, ++last, i); swap(v, left, last); /* restore partition elem */ qsort(v, left, last-1); qsort(v, last+1, right); } void swap(int v[], int i, int j) { int temp; temp = v[i]; v[i] = v[j]; v[j] = temp; }
bigfog 2014-04-21
  • 打赏
  • 举报
回复
递归调用,使用栈实现的,而栈的大小一般由编译系统指定,不是非常大,所以就会Stack overflow 因此,要应付大数据,不要用递归
kenny_hwei 2014-04-21
  • 打赏
  • 举报
回复
Stack overflow,往往是由于死递归造成的

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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