注册 登录
编程论坛 C语言论坛

新手求教一个简单问题:用qsort函数怎么为float数据排序?

宇宙规律 发布于 2017-01-21 16:18, 1668 次点击
#include<stdio.h>                    
                    
#include<stdlib.h>                    
                    
int commp(const void *a, const void *b)                    
{                    
 return ((int *)a)[0] - ((int *)b)[0];                    
}                    
                    
main()                    
{                    
 int i,a[5][2] = {2,0, 3,3, 4,5, 1,1, 99,22};                    
 qsort(a, sizeof(a)/sizeof(int)/2, 2*sizeof(int ),commp);                    
                    
 for(i = 0; i < sizeof(a)/sizeof(int )/2; i++)                    
 {                    
if(a[i][1] != 0)                    
{                    
printf("%d", a[i][0]);   

printf("\n");               
break;                    
}                    
 }                    
                    
 return 0;   
 
}                    


1
Press any key to continue


怎么为float数据排序计算?例如:a[5][2] = {2.01,0, 3.1,-3.2, 4,5, 1,1, 9.9,22};   


10 回复
#2
宇宙规律2017-01-21 16:55
经过网上搜索qsort函数用法,问题有解了!

#include<stdlib.h>

int commp(const void *a, const void *b)
{
return *(double *)a > *(double *)b ? 1 : -1;
}

main()
{
 int i;
 double a[5][2] = {2.01,0, -3.1,-3.2, 4,5, 1,1, 9.9,22};
 qsort(a, sizeof(a)/sizeof(double)/2, 2*sizeof(double ),commp);

 for(i = 0; i < sizeof(a)/sizeof(double )/2; i++)
 {
if(a[i][1] != 0)
{
printf("%lf", a[i][0]);

printf("\n");
break;
}
 }

 return 0;
 
}


-3.100000
Press any key to continue



#3
宇宙规律2017-01-21 17:04
感谢版主:炎天的真心指教!
只有本站会员才能查看附件,请 登录


#4
吹水佬2017-01-21 17:23
#include <stdio.h>
#include <stdlib.h>

int comp(const void *a,const void *b)
{
    return ((float *)a)[0] > ((float *)b)[0] ? 1 : -1;
}

main()
{
    float a[5][2]={2.01,0, 3.1,-3.2, 4,5, 1,1, 9.9,22};
    qsort(a,5, sizeof(float)*2, comp);
    int i,j;
    for (i=0; i<5; i++)
    {
        for (j=0; j<2; j++)
            printf("%.2f ", a[i][j]);
        printf("\n");
    }
}
#5
炎天2017-01-21 20:59
回复 3楼 宇宙规律
额, 你没有弄错吧?  我没有回帖诶在这之前。
主要是数据类型不要对应错了
#include<stdio.h>                    
                    
#include<stdlib.h>                    
                    
int commp(const void *a, const void *b)                    
{                    
  return ((float *)a)[0] - ((float *)b)[0];                    
}                    
                    
main()                    
{   
    int i = 0;               
    float a[5][2] = {2.01,0, 3.1,-3.2, 4,5, 1,1, 9.9,22};   
                  
    qsort(a, sizeof(a)/sizeof(float)/2, 2*sizeof(float ),commp);                    
                    
    for(i = 0; i < sizeof(a)/sizeof(float )/2; i++)                    
    {                    
       if(a[i][1] != 0)                    
       {                    
          printf("%-6.2f%-6.2f", a[i][0], a[i][1]);   

          printf("\n");               
          //break;                    
       }                    
    }                    
                    
    return 0;   
 }
#6
九转星河2017-01-21 21:51
看三楼的贴我莫名其妙地笑了~
#7
宇宙规律2017-01-22 09:50
回复 5楼 炎天
感谢指教;我是自学C语言的,书上确实没有这样的函数方法;

#include<stdio.h>                    
                    
#include<stdlib.h>                    
                    
int commp(const void *a, const void *b)                    
{                    
  return ((float *)a)[0] - ((float *)b)[0];                    
}                    
                    
main()                    
{   
    int i = 0;               
    float a[5][2] = {2.01,0, -3.1,-1, 4,5, 1,-1, 9.9,22};   
                  
    qsort(a, sizeof(a)/sizeof(float)/2, 2*sizeof(float ),commp);                    
                    
    for(i = 0; i < sizeof(a)/sizeof(float )/2; i++)                    
    {                    
       if(a[i][1] != 0)                    
       {                    
          printf("%-6.2f%-6.2f", a[i][0], a[i][1]);   

          printf("\n");               
          break;                    
       }                    
    }                    
                    
    return 0;   
 }


-3.10 -1.00
Press any key to continue
#8
宇宙规律2017-01-22 09:55
#include<stdio.h>                    
                    
#include<stdlib.h>                    
                    
int commp(const void *a, const void *b)                    
{                    
  return ((float *)a)[0] - ((float *)b)[0];                    
}                    
                    
main()                    
{   
    int i = 0;               
    float a[5][2] = {2.01,0, -3.1,-1, 4,5, 1,-1, 9.9,22};   
                  
    qsort(a, sizeof(a)/sizeof(float)/2, 2*sizeof(float ),commp);                    
                    
    for(i = 0; i < sizeof(a)/sizeof(float )/2; i++)                    
    {                    
       if(a[i][1] != 0)                    
       {                    
          printf("%-6.2f%-6.2f", a[i][0], a[i][1]);
          printf("\n");      
          if(a[i][1] == a[i+1][1])
          printf("%-6.2f%-6.2f", a[i+1][0], a[i+1][1]);

          printf("\n");               
          break;                    
       }                    
    }                    
                    
    return 0;   
 }

-3.10 -1.00
1.00  -1.00
Press any key to continue

#9
九转星河2017-01-22 11:52
自学不错哦~我也来学习一下~
#10
九转星河2017-01-22 11:54
sizeof(a)/sizeof(a[0])~比较好看结果都是5~
#11
九转星河2017-01-22 12:00
2*sizoef(float)等价于sizeof(a[0])~
1