请教c语言,quicksort 排序问题

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>

typedef struct t_complexe{double real;double imag;}data;
typedef struct t{data c;double m;}complexe;
int partition(int tab[],int left,int right){
int pivot,i;
pivot=tab[right];
for(i=left;i<right;i++){if(tab[i]<=pivot){
int p;
p=tab[i];
tab[i]=tab[left];
tab[left]=p;
left++;}
}
int h;
h=tab[left];
tab[left]=tab[right];
tab[right]=h;
return left;
}
int quicksort(int t[],int l,int r){
int ic;
if (l<r)
{ic=partition(t,l,r);
quicksort(t,l,ic-1);
quicksort(t,ic+1,r);}
return 0;
}
double module (data z){
double c=(z.real*z.real)+(z.imag*z.imag);
double s=sqrt(c);
return s;
}
int main(void){
complexe tab[20];
int i;
srand(time(NULL));
for(i=0;i<20;i++)tab[i].c.real=rand()/(RAND_MAX+1.0);
for(i=0;i<20;i++)tab[i].c.imag=rand()/(RAND_MAX+1.0);
for(i=0;i<20;i++)tab[i].m=module(tab[i].c);
quicksort(tab,0,19);
for(i=0;i<20;i++)printf("%lf\t%lf\t%lf\n",tab[i].c.real,tab[i].c.imag,tab[i].m);
return 0;
}
我写的程序,c语言的,刚刚开始学,不过好像不太对,呜呜,估计大概问题在主函数的这一行quicksort(tab,0,19);我想做的是通过这个程序输入复数的实部和虚部,计算它们的模,然后对模排序并显示相应的实部和虚部,刚刚开始学,程序编的很乱,这才是第二节课的内容,c语言好难,请求帮忙啊,谢谢啦

以后 编程注意排版。。好的排版 看起来 舒服多了。。。就是楼上 说的 传递时 类型错误。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>

typedef struct t_complexe{double real;double imag;}data;
typedef struct t{data c;double m;}complexe;

int partition(complexe tab[],int left,int right)
{
complexe pivot;
int i;
pivot=tab[right];
for(i=left;i<right;i++)
{
if(tab[i].m<=pivot.m)
{
complexe p;
p=tab[i];
tab[i]=tab[left];
tab[left]=p;
left++;
}
}
complexe h;
h=tab[left];
tab[left]=tab[right];
tab[right]=h;

return left;
}

int quicksort(complexe t[],int l,int r)
{
int ic;
if (l<r)
{
ic=partition(t,l,r);
quicksort(t,l,ic-1);
quicksort(t,ic+1,r);
}

return 0;
}

double module (data z)
{
double c=(z.real*z.real)+(z.imag*z.imag);
double s=sqrt(c);

return s;
}

int main(void)
{
complexe tab[20];
int i;
srand(time(NULL));
for(i=0;i<20;i++)
tab[i].c.real=rand()/(RAND_MAX+1.0);
for(i=0;i<20;i++)
tab[i].c.imag=rand()/(RAND_MAX+1.0);
for(i=0;i<20;i++)
tab[i].m=module(tab[i].c);
quicksort(tab,0,19);
for(i=0;i<20;i++)
printf("%lf\t%lf\t%lf\n",tab[i].c.real,tab[i].c.imag,tab[i].m);

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-30
要把tab这个complexe数组传入,那么函数的入口参数应该写为complexe[]而不是int[],然后在其他函数里要使用模计算的时候应该取tab[i].m追问

是不是我没听太懂啊,我试了,照你说的该还是不行的啊,能详细点儿不,谢谢啦

追答

顶一下 king121314 的答案,编译没问题,但是排序结果貌似不对,不过这应该是你自己处理的逻辑错误了。话说第二节课做这么复杂的程序不容易呀!

相似回答
大家正在搜