C语言 快速排序 求高手啊 看下我的代码哪有错误

#include<malloc.h>#include<stdio.h>#include<stdlib.h>#defineMAX_SIZE1000000typedefstr... # include <malloc.h>
# include <stdio.h>
# include <stdlib.h>

# define MAX_SIZE 1000000

typedef struct {
int key;
}element ;
element a[MAX_SIZE];

void Swap(element *a1,element *a2)
{
int temp;
temp = a1->key;
a1->key = a2->key;
a2->key = temp;

}

void quickSort(element a[],int left,int right)
{
int pivot,i,j;

if( left < right )
{
i = left ;
j = right;
pivot = a[left].key;
do{
do i++;while(a[i].key<pivot);
do j--;while(a[i].key>pivot);
if(i<j)Swap(&a[i],&a[j]);
}while(i<j);
}
Swap(&a[left],&a[j]);
quickSort(a,left,j-1);
quickSort(a,j+1,right);
}

int main()
{
int i=0,n=0,num = 1;
FILE *fp1,*fp2;

/*打开要读入数据的文件*/
if((fp1=fopen("input.txt","r"))==NULL)
{
printf("cannot open file\n");
exit(0);
return 0;
}
/*打开要输出数据的文件*/
if((fp2=fopen("output.txt","w"))==NULL)
{
printf("cannot open file\n");
exit(0);
return 0;
}

do{
i=0;
fscanf(fp1,"%d",&n); /*读入一个数字*/
if(n == -1)break; /*判断是否读到结束符,若是跳出循环*/
for(i=0;i<n;i++)
{
fscanf(fp1,"%d",&a[i].key);
}

quickSort(a,0,n);
fprintf(fp2,"case %d:%d",num,n);
for(i=0;i<n;i++)
{
fprintf(fp2,"%d",a[i].key);

}
for(i=0;i<n;i++)
{
a[i].key = 0;//数据清零
}

}while(1);

fclose(fp1);
fclose(fp2);

return 1;

}
展开
 我来答
duck_lwz
2011-12-12 · TA获得超过512个赞
知道小有建树答主
回答量:313
采纳率:0%
帮助的人:332万
展开全部
你的快速排序函数没有结束条件,一直递归调用下去的,数组越界还在调用。
追问
这是书上的代码  大侠能具体说一下吗
追答
void quickSort(element a[],int left,int right)
{
……
quickSort(a,left,j-1); //你的程序执行到这里,就不停的调用下去,j都是负数了还在调用,你可以自己设置断点查看一下,要学着自己调试程序啊
……
}
梁蓉187
2011-12-14
知道答主
回答量:15
采纳率:0%
帮助的人:5.1万
展开全部
这是书上的代码 大侠能具体说一下吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式