zoukankan      html  css  js  c++  java
  • 45.使用qsort对结构体数组进行排序,实现对结构的体一级排序和二级排序,进一步了解qsort的原理

    qsort对结构体数组进行排序时,可以根据结构体元素中的任意某个成员进行比较之后,如果要交换则会连带结构体中其他成员的一起进行整体的结构体元素交换
    所以感觉真是万能排序接口



    只进行对结构体的一级排序
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct _stu
    {
        char name[10];
        float score;
    }Stu;
    
    
    int callBackCompare(const void * pa, const void * pb)//一级升序
    {
    #if 0//正确
        if(strcmp((*(Stu*)pa).name,(*(Stu*)pb).name)>0)
            return 1;
        else
            return 0;//或return -1;都行,毕竟qsort只对正数感兴趣
    #endif
    
    #if 1  //正确
        if(strcmp(((Stu*)pa)->name,((Stu*)pb)->name) > 0 )
            return 1;
        else
            return 0;//或return -1;都行,毕竟qsort只对正数感兴趣
    
    #endif
    }
    
    int main(void)
    {
        Stu stu[] = {{"aaa",23.5},
                     {"xxx",45.6},
                     {"bbb",89},
                     {"xxx",23.4},
                     {"yyy",100}};
    
        qsort(stu,sizeof(stu)/sizeof(*stu),sizeof(Stu),callBackCompare);
    
        int i;
        for(i = 0;i<5;i++)
        {
            printf("%s,%f
    ",stu[i].name,stu[i].score);
    
        }
    
        return 0;
    }




    对结构体一级排序的同时进行二级排序
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct _stu
    {
        char name[10];
        float score;
    }Stu;
    
    
    int callBackCompare(const void * pa, const void * pb)//一级升序二级降序
    {
    #if 0//正确
        if(strcmp((*(Stu*)pa).name,(*(Stu*)pb).name)>0)//对1级进行升序
            return 1;
        else
        {
            if( (*(Stu*)pa).score < (*(Stu*)pb).score )//对2级进行降序
            {
                return 1;
            }
            else
                return 0;
        }
    #endif
    
    #if 0  //正确
        if(strcmp(((Stu*)pa)->name,((Stu*)pb)->name) > 0 )
            return 1;
        else
        {
            if( ((Stu*)pa)->score < ((Stu*)pb)->score )//对2级进行降序
            {
                return 1;
            }
            else
                return 0;
        }
    
    #endif
    }
    
    int main(void)
    {
        Stu stu[] = {{"aaa",23.5},
                     {"xxx",45.6},
                     {"bbb",89},
                     {"xxx",23.4},
                     {"yyy",100}};
    
        qsort(stu,sizeof(stu)/sizeof(*stu),sizeof(Stu),callBackCompare);
    
        int i;
        for(i = 0;i<5;i++)
        {
            printf("%s,%f
    ",stu[i].name,stu[i].score);
    
        }
    
        return 0;
    }
  • 相关阅读:
    RHEL 6.5 安装Docker
    sar命令
    Linux 安装部署 Redis
    hugepage设置
    pycharm使用
    oracle如何保证数据一致性和避免脏读
    转:数据库实例自动crash并报ORA-27157、ORA-27300等错误
    oracle安装内核参数设置
    外部表
    LNMP环境搭建
  • 原文地址:https://www.cnblogs.com/ZhuLuoJiGongYuan/p/9516950.html
Copyright © 2011-2022 走看看