#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 1000
void quick_sort(int a[],int left,int right)
{
int i=left,j=right;
int key;
key=a[0];
while(i<j)//循环结束的条件
{
for(;i<j;j--)
if(a[j]<key)
{
a[i++]=a[j];
break;
}
for(;i<j;i++)
if(a[i]>key)
{a[j--]=a[i];
break;}
}
a[i]=key;
quick_sort(a,left,i-1);
quick_sort(a,i+1,right);
}
void main()
{
int i,array[N]={0};
clock_t start,end;
double t;
start=clock();//开始程序运行计时
srand((unsigned)time(NULL));
for(i=0;i<N;i++)
array[i]=rand()%1000;
quick_sort(array,0,999);
for(i=0;i<N;i++)
printf("%5d",array[i]);
printf("\n");
end=clock();
t=(double)(end-start)/CLOCKS_PER_SEC;
printf("快速排序运行时间:%lf秒\n",t);
}
调试结果显示为
1>------ Build started: Project: quick_sort, Configuration: Debug Win32 ------ 1> quick_sort.c 1>d:\数据结构&算法设计c源程序\quick_sort\quick_sort\quick_sort.c(27): warning C4717: “quick_sort”: 如递归所有控件路径,函数将导致运行时堆栈溢出 1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 求大神指点
首先给你个忠告永远不要省略if for while等语句的大括号
然后 一行只写一句话
最后 具体的错误等稍后我看过代码再给出 ###### 递归爆炸了,改成循环吧 ######数据不大 可以使用递归 ,数据大了 会出现栈溢出,因为在没有分支结束前或者被强行中断,单个线程是不会释放栈现场的。1.修改栈大小 。2.采用非递归方式。----几乎各个语言都要避免下这个问题哦######应该需要修改编译器堆栈的大小,但没有实际尝试,可以先修改N的大小,看是否堆栈还溢出。是否还有其他错误。######递归函数中没有一个return,递归调用还在必经路径上——连编译器都知道它会归死。######回复 @zhangjihan10 : 模拟一个栈 加上goto语句 就比较简单了 不过代码还是会很乱######回复 @zhangjihan10 : 当然可以, 自己模拟一个栈就可以了, 但是这有什么意义呢?######回复 @猫咪喵喵 :没递归结束条件呀,你能用循环写出来吗######回复 @猫咪喵喵 : 你是怎么贴出带有行号和滚动条这种效果的######然后统计时间的时候居然把数据准备 打印输出结果都算进去 真是乱的可以###### 简单看了一下你的代码
你的代码确实会栈溢出
这源于你并没有指定结束递归的条件 ###### 试试看这个
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 1000 void quick_sort(int a[], int start, int end) { int i = start, j = end; int key = a[i]; while(i < j) { for(; i < j; j--) { if(a[j] < key) { a[i++] = a[j]; break; } } for(; i < j; i++) { if(a[i] > key) { a[j--] = a[i]; break; } } } a[i] = key; if(start < i - 1){ quick_sort(a, start, i - 1); } if(end > i + 1){ quick_sort(a, i + 1, end); } } int main() { srand((unsigned)time(NULL)); //随机数种子准备 int array[N] = {0}; //要被排序的数据准备 for(int i = 0; i < N; i++){ //随机生成一些数据 array[i] = rand() % N; } clock_t start = clock(); //记录开始时间 quick_sort(array, 0, 999); //调用排序算法对数据进行排序 clock_t end = clock(); //记录结束时间 for(int i = 0; i < N; i++){ //打印输出排序后的数据 printf("%5d", array[i]); } printf("\n"); double t = (double)(end - start) / CLOCKS_PER_SEC; //计算算法所消耗的时间 printf("快速排序运行时间:%lf秒\n", t); //输出时间 return 0; }
######回复 @月光双刀 : 仔细看提问者的代码 溢出并不是因为数据量过大 而是他的代码有问题 所以说 这个可以解决问题######这个也会栈溢出######编辑器上有个插入代码或脚本啦 @zhangjihan10######回复 @zhangjihan10 : 。######求大神手把手教代码高亮使用方法
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。