【求教】不能准确排序的原因?
#include<stdio.h> #include<stdlib.h>
int commpC(const void *a, const void *b)
{
return *( float*)b > *(float *)a ? 1 : -1;
}
main()
{
float m= 3.6,n= 6.333333, mn[15] ;
int c[62]={1 ,3 ,4 ,8 ,16 ,24 ,28 ,33 ,34 ,35 ,39 ,41 ,45 ,50 ,51 ,56 ,60 ,61 ,62 ,69 ,
70 ,72 ,76 ,80 ,87 ,88 ,92 ,93 ,94 ,96 ,102,107,110,115,120,122,126,130,136,139,
145,148,153,160,162,167,174,182,183,190,191,192,193,194,202,207,209,211,212,214,
217,224 },
i[10][17]={2 ,6 ,12 ,13 ,14 ,15 ,16 ,20 ,23 ,24 ,25 ,26 ,27 ,30 ,31 ,33 ,34 ,1 ,2 ,3 ,
4 ,11 ,12 ,13 ,14 ,15 ,19 ,24 ,26 ,29 ,33 ,34 ,36 ,39 ,1 ,3 ,4 ,9 ,12 ,13 ,
21 ,29 ,32 ,33 ,34 ,41 ,42 ,43 ,48 ,49 ,52 ,0 ,5 ,8 ,10 ,18 ,21 ,22 ,28 ,35 ,
43 ,46 ,47 ,48 ,51 ,52 ,53 ,54 ,0 ,5 ,6 ,7 ,11 ,14 ,15 ,17 ,20 ,22 ,23 ,25 ,
27 ,28 ,35 ,36 ,38 ,2 ,11 ,12 ,13 ,14 ,16 ,19 ,20 ,23 ,24 ,25 ,26 ,27 ,30 ,31 ,
32 ,33 ,1 ,2 ,3 ,4 ,10 ,11 ,12 ,13 ,14 ,19 ,24 ,26 ,29 ,32 ,33 ,34 ,39 ,1 ,
3 ,4 ,9 ,10 ,12 ,13 ,21 ,23 ,32 ,33 ,34 ,41 ,43 ,48 ,49 ,52 ,0 ,5 ,8 ,10 ,
18 ,21 ,22 ,23 ,28 ,31 ,35 ,38 ,43 ,46 ,47 ,48 ,51 ,0 ,3 ,6 ,7 ,11 ,14 ,15 ,
17 ,20 ,22 ,25 ,27 ,31 ,36 ,38 ,40 ,41 },j;
if(i[0][2]-i[0][1]-i[0][0]!=0)
mn[0]=(m+n)/2-(float)(c[i[0][2]]-c[i[0][1]]-c[i[0][0]])/(i[0][2]-i[0][1]-i[0][0]);
if(i[0][2]-i[0][1]-i[0][0]==0)
mn[0]=1000;
if(i[0][3]-i[0][2]-i[0][1]!=0)
mn[1]=(m+n)/2-(float)(c[i[0][3]]-c[i[0][2]]-c[i[0][1]])/(i[0][3]-i[0][2]-i[0][1]);
if(i[0][3]-i[0][2]-i[0][1]==0)
mn[1]=1000;
if(i[0][4]-i[0][3]-i[0][2]!= 0)
mn[2]=(m+n)/2-(float)(c[i[0][4]]-c[i[0][3]]-c[i[0][2]])/(i[0][4]-i[0][3]-i[0][2]);
if(i[0][4]-i[0][3]-i[0][2]== 0)
mn[2]=1000;
if(i[0][5]-i[0][4]-i[0][3]!= 0)
mn[3]=(m+n)/2-(float)(c[i[0][5]]-c[i[0][4]]-c[i[0][3]])/(i[0][5]-i[0][4]-i[0][3]);
if(i[0][5]-i[0][4]-i[0][3]== 0)
mn[3]=1000;
if(i[0][6]-i[0][5]-i[0][4]!=0)
mn[4]=(m+n)/2-(float)(c[i[0][6]]-c[i[0][5]]-c[i[0][4]])/(i[0][6]-i[0][5]-i[0][4]);
if(i[0][6]-i[0][5]-i[0][4]==0)
mn[0]=1000;
if(i[0][7]-i[0][6]-i[0][5]!=0)
mn[5]=(m+n)/2-(float)(c[i[0][7]]-c[i[0][6]]-c[i[0][5]])/(i[0][7]-i[0][6]-i[0][5]);
if(i[0][7]-i[0][6]-i[0][5]==0)
mn[1]=1000;
if(i[0][8]-i[0][7]-i[0][6]!= 0)
mn[6]=(m+n)/2-(float)(c[i[0][8]]-c[i[0][7]]-c[i[0][6]])/(i[0][8]-i[0][7]-i[0][6]);
if(i[0][8]-i[0][7]-i[0][6]== 0)
mn[2]=1000;
if(i[0][9]-i[0][8]-i[0][7]!= 0)
mn[7]=(m+n)/2-(float)(c[i[0][9]]-c[i[0][8]]-c[i[0][7]])/(i[0][9]-i[0][8]-i[0][7]);
if(i[0][9]-i[0][8]-i[0][7]== 0)
mn[3]=1000;
if(i[0][10]-i[0][9]-i[0][8]!=0)
mn[8]=(m+n)/2-(float)(c[i[0][10]]-c[i[0][9]]-c[i[0][8]])/(i[0][10]-i[0][9]-i[0][8]);
if(i[0][10]-i[0][9]-i[0][8]==0)
mn[0]=1000;
if(i[0][11]-i[0][10]-i[0][9]!=0)
mn[9]=(m+n)/2-(float)(c[i[0][11]]-c[i[0][10]]-c[i[0][9]])/(i[0][11]-i[0][10]-i[0][9]);
if(i[0][11]-i[0][10]-i[0][9]==0)
mn[1]=1000;
if(i[0][12]-i[0][11]-i[0][10]!= 0)
mn[10]=(m+n)/2-(float)(c[i[0][12]]-c[i[0][11]]-c[i[0][10]])/(i[0][12]-i[0][11]-i[0][10]);
if(i[0][12]-i[0][11]-i[0][10]== 0)
mn[2]=1000;
if(i[0][13]-i[0][12]-i[0][11]!= 0)
mn[11]=(m+n)/2-(float)(c[i[0][13]]-c[i[0][12]]-c[i[0][11]])/(i[0][13]-i[0][12]-i[0][11]);
if(i[0][13]-i[0][12]-i[0][11]== 0)
mn[3]=1000;
if(i[0][14]-i[0][13]-i[0][12]!=0)
mn[12]=(m+n)/2-(float)(c[i[0][14]]-c[i[0][13]]-c[i[0][12]])/(i[0][14]-i[0][13]-i[0][12]);
if(i[0][14]-i[0][13]-i[0][12]==0)
mn[0]=1000;
if(i[0][15]-i[0][14]-i[0][13]!=0)
mn[13]=(m+n)/2-(float)(c[i[0][15]]-c[i[0][14]]-c[i[0][13]])/(i[0][15]-i[0][14]-i[0][13]);
if(i[0][15]-i[0][14]-i[0][13]==0)
mn[1]=1000;
if(i[0][16]-i[0][15]-i[0][14]!= 0)
mn[14]=(m+n)/2-(float)(c[i[0][16]]-c[i[0][15]]-c[i[0][14]])/(i[0][16]-i[0][15]-i[0][14]);
if(i[0][16]-i[0][15]-i[0][14]== 0)
mn[2]=1000;
for(j=0;j<15;j++)
printf("%f\n", mn[j]); printf("\n");
qsort(mn, sizeof(mn)/sizeof(float)/2, 2*sizeof(float ),commpC);
for(j = 0; j < sizeof(mn)/sizeof(float )/2; j++)
{
printf("%f", mn[j]);
printf("\n");
}
}
1.716666
0.366666
0.966666
1.216666
1.351282
0.784848
1.120513
1.650877
1.375757
1.357971
1.341666
1.357971
1.582051
1.609524
1.566666
1.716666
1.716666
1.716666
1.716666
1.716666
1.716666
1.716666
Press any key to continue