请教c语言,quicksort 排序问题
发布网友
发布时间:2022-05-26 12:51
我来回答
共2个回答
热心网友
时间:2023-10-17 22:22
以后 编程注意排版。。好的排版 看起来 舒服多了。。。就是楼上 说的 传递时 类型错误。
#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 mole (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=mole(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;
}
热心网友
时间:2023-10-17 22:22
要把tab这个complexe数组传入,那么函数的入口参数应该写为complexe[]而不是int[],然后在其他函数里要使用模计算的时候应该取tab[i].m追问是不是我没听太懂啊,我试了,照你说的该还是不行的啊,能详细点儿不,谢谢啦
追答顶一下 king121314 的答案,编译没问题,但是排序结果貌似不对,不过这应该是你自己处理的逻辑错误了。话说第二节课做这么复杂的程序不容易呀!