搜索

这样写快速排序函数为什么会栈溢出?

发布网友 发布时间:2022-04-20 06:44

我来回答

2个回答

热心网友 时间:2023-06-28 11:54

30000个测试数据在我的环境(4GB RAM)是没有问题的,但50000肯定有问题。一是递归导致内存耗得太多,至于是不是会耗尽,要看实际情况(也许测试环境是小型机呢);二是50000已经超过C语言的int型范围(-32768~32767),即使你用long型数表示数组下标也不行,因为数组下标只能是int型。
我用随机数方式对30000大小的数组赋值,然后用你的快速排序进行测试,运行没有问题。参考C源代码如下:

#include "stdio.h"
#include "stdlib.h"
#include "time.h"

#define MAX 30000

void kuai(int *a,int p,int r)
{
int i = p-1;
int j = p;
if(p < r)
{
for(j = p;j < r;j++)
{
if(a[j] <= a[r])
{
i++;
if(i != j)
{
a[i] ^= a[j] ^= a[i] ^= a[j];
}
}
}
if(i+1 != r)
{
a[i+1] ^= a[r] ^= a[i+1] ^= a[r];
}
kuai(a,p,i);
kuai(a,i+2,r);
}
}

void main()
{
int i;
int a[MAX];

srand((unsigned)time(NULL));
for(i=0; i<MAX; i++)
{
a[i] = rand();
}

kuai(a, 0, MAX-1);

for(i=0; i<MAX; i++)
{
printf("%8d", a[i]);
}
printf("\n");
}

热心网友 时间:2023-06-28 11:54

什么测试数据会导致栈溢出?
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top