发布网友 发布时间: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
什么测试数据会导致栈溢出?