按结构体某一元素排序的小程序(fishing_3)

        最近遇到,要排序选最优的问题,有11组3类属性【a,b,c】的数据,需要在11个b中选出最小的b,并输出对应的a,c。因为都是数,之前我是打算用数组来做,声明3个数组,然后对其中一个进行排序,然后选出索引对应的其他数组,但感觉没思路,觉得可能用结构体数组可能会简便些,至少看起来没那么多的数组看着烦,最后写出来了,一些需要注意的点在程序的注释部分都写了。做的测试源代码如下:

#include "stdio.h"

/***声明结构体***/
typedef struct   //这里比直接struct recommand声明的好处就是,省去了struct recommand mid这样的声明。
{
  float w;
  int   k;
  int   f;
}recommand;


void main(void)
{
 int i;
 int j;
 int v;

 #define numbers 11     //结构体数组大小,方便移植

 recommand re[numbers]; //定义结构体数组re

 recommand mid; //定义用于交换传值的中间结构体mid

 recommand *p = re; //定义结构体指针p,指向结构体数组re的首地址

 /**初始化结构体数组**/
 for(i = 0;i < numbers;i++)
 {
    re[i].w = 1 + i*1.0/10; //这里要注意下,浮点数和整数的一些转换,我在这里就弄错过
    re[i].f = 1 + i;
    re[i].k = 20 -i;
    printf("第%d个结构体的信息为: w :%f  k:%d  f:%d \r\n", i, re[i].w, re[i].k, re[i].f);
 }

/**排序**/
 for(i = 1;i <= (numbers-1);i++) //注意这里的循环次数
 {
     for(j = 0;j <= (numbers - i -1);j++) //注意这里的循环次数
     {
        if((p+j)->k > (p+j+1)->k) //从小到大排序   //(p+j)->k < (p+j+1)->k 从大到小排序
       {
          mid = *(p+j);
          *(p+j) = *(p+j+1);
          *(p+j+1)=mid;
       }
    
     }

 }
 printf("\r\n按k从小到大排序,排序结果为:");

 printf("\r\n");

//打印最后结果
 for(v = 0;v < numbers;v++)
 {
    printf(" w:%f, k:%d, f:%d \r\n", (p+v)->w, (p+v)->k, (p+v)->f);
 }

}

 

程序的结果如下:

 

 

参考的资料:

https://blog.csdn.net/csdn17355456893/article/details/77607340

 

欢迎批评指正交流!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值