u010479604 2018-11-24 07:03 采纳率: 83.3%
浏览 334

C语言快速排序后,没有达到排序效果,帮忙看看,谢谢了,代码如下:

#include
#include
#include
#include
#define STEP 10356
#define COORD 4
float s[STEP][COORD];
struct item
{
float a;
float b;
float c;
float d;
};
struct item m[10356];

int cmp(const void *a, const void*b)
{
struct item *c = (struct item *)a;
struct item *d = (struct item *)b;
if(c->a != d->a)
return c->a - d->a;
else if(c->b != d->b)
return c->b - d->b;
else if(c->c != d->c)
return c->c - d->c;
else
return c->d - d->d;
}

int main()
{
FILE *fp1, *fp2;
int n=10356,i,j;

fp1=fopen("1-NewSC-20-0-3-0.1-nodiv.txt","r");
for(i=0;i<STEP;i++)
{
   for(j=0;j<COORD;j++)
    {
        fscanf(fp1,"%f",&s[i][j]);
    }
        fscanf(fp1,"\n");
}
fclose(fp1); 

fp1=fopen("1-NewSC-20-0-3-0.1-nodiv.txt","r");
for (int i = 0; i < n; i++) {
    m[i].a=s[i][0];
    m[i].b=s[i][1];
    m[i].c=s[i][2];
    m[i].d=s[i][3];
    printf("%10.2f %10.2f %10.2f %10.6f\n", m[i].a, m[i].b, m[i].c, m[i].d);
    printf("\n");
}
fclose(fp1);    
qsort(m,n,sizeof(m[0]),cmp);
fp2=fopen("1排序.txt","w+");
for(i=0;i<n;i++){
    printf("%10.2f %10.2f %10.2f %10.6f\n",m[i].a,m[i].b,m[i].c,m[i].d);
    printf("\n");
    fprintf(fp2,"%10.2f %10.2f %10.2f %10.6f\n", m[i].a,m[i].b,m[i].c,m[i].d);
}
fclose(fp2); 
return 0;

}

但是排序出来结果则是:
2.00 -89.14 6.88 0.000007
2.00 -86.27 4.02 0.000012
2.00 -89.14 4.02 0.000006
1.99 -44.02 -18.56 0.000157
1.48 -73.12 -22.40 0.000002
2.00 -83.41 1.15 0.000005
1.99 -86.26 1.15 0.000009
1.99 -89.14 1.15 0.000010
1.46 -11.57 7.85 0.000005
1.51 -69.49 -22.40 0.000016
2.00 -86.27 -1.73 0.000003
1.39 -80.48 77.79 0.000003
1.55 -66.03 -22.40 0.000053
2.00 -86.28 -4.60 0.000001
2.00 -89.14 -4.60 0.000002
1.59 -62.74 -22.40 0.000174
1.64 -59.64 -22.40 0.000340
2.00 -86.27 18.71 0.000061
2.00 -89.14 18.71 0.000055
1.69 -56.72 -22.40 0.000537
1.75 -53.99 -22.40 0.000635
1.99 -80.47 15.94 0.000052
1.76 -11.12 -88.31 0.000216
1.97 -86.22 15.94 0.000053
1.97 -89.13 15.94 0.000035
……………………………………………………
……………………………………………………
1.80 84.57 32.45 0.000028
1.80 84.58 48.39 0.000128
1.80 84.59 4.47 0.000008
1.80 84.58 -17.52 0.000018
1.80 84.57 1.28 0.000001
1.80 84.57 43.87 0.000152
1.80 87.77 -5.11 0.000001
1.80 87.77 4.47 0.000002
1.80 87.77 18.13 0.000076
2.00 85.12 16.34 0.000097
1.80 87.77 27.85 0.000109
1.80 87.77 39.36 0.000151
求指教,怎么会出现这种情况,需要怎么修改代码,谢谢了!!!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器