文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一文带你学会C语言中的qsort函数

2022-12-21 09:00

关注

铺垫知识

qsort函数

参数类型    

void qsort (void* base, size_t num, size_t size,
int (*compar)(const void*,const void*));

参数类型解释

void* 

参数1和参数4中的void*无类型的指针,能够接受各种类型的参数,这样的话,我们就能传各种类型的参数

void*的注意事项    

由于void是无类型指针,所以

1、void类型指针不能进行加减整数的操作(不知道步长)

2、不能进行解引用操作,

3、想要进行这些操作,需要把void类型强制类型转成所需要的类型才能操作,例如(int*)e1,就将void*类型的e1转换为int*

使用qsort函数进行整型数组的排序

在自己完成的in_cmp函数中,给出的是两个元素的比较方法

当然,我们可以用强制类型转换后,就知道了步长,使用减法来比较e1和e2的大小

#include<stdio.h>
#include<stdlib.h> 
int int_cmp(const void* e1,const void* e2)
{
    if(*(int*)e1 > *(int*)e2 )//先强制类型转换,在解引用进行比较
       return 1;
    else if(*(int*)e1 == *(int*)e2 )
       return 0;
    else 
       return -1;
}
int main()
{
    int i=0;
    int arr[10]={1,4,0,5,8,9,2,3,6,7};
    int sz=sizeof(arr)/sizeof(arr[0]);
    qsort(arr,sz,sizeof(arr[0]),int_cmp);
    for(i=0;i<sz;i++)
       printf("%d ",arr[i]);
    return 0;
}

使用qsort函数进行浮点型数组的排序

#include<stdio.h>
#include<stdlib.h> 
int float_cmp(const void* e1,const void* e2)
{
    return *(float*)e1 - *(float*)e2;
}
int main()
{
    int i=0;
    float arr[5]={1.0,3.5,2.2,7.3,5.5};
    int sz=sizeof(arr)/sizeof(arr[0]);
    qsort(arr,sz,sizeof(arr[0]),float_cmp);
    for(i=0;i<sz;i++)
       printf("%.1f ",arr[i]);
    return 0;
}

使用qsort函数进行结构体数组的排序

以学生信息结构体为例,结构体包括学生名字和学生年龄

以名字为基准进行比较

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
struct student
{
    char name[10];
    int age;
};
 
//以名字来对结构体进行排序
int struct_cmp_byname(const void* e1, const void* e2)
{
    return strcmp(((struct student*)e1)->name, ((struct student*)e2)->name);
}
 
int main()
{
    int i=0;
    struct student stu[3] = { {"张三",20},{"李四",19},{"王五",18}};
    int sz = sizeof(stu) / sizeof(stu[0]);
    qsort(stu, sz, sizeof(stu[0]), struct_cmp_byname);
    for (i = 0; i < sz; i++)
    {
        printf("%s %d\n", stu[i].name, stu[i].age);
    }
}

以年龄为基准进行比较 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
struct student
{
    char name[10];
    int age;
};
 
//以年龄来对结构体进行排序
int struct_cmp_byage(const void* e1, const void* e2)
{
    return ((struct student*)e1)->age - ((struct student*)e2)->age;
}
 
int main()
{
    int i=0;
    struct student stu[3] = { {"张三",20},{"李四",19},{"王五",18}};
    int sz = sizeof(stu) / sizeof(stu[0]);
    qsort(stu, sz, sizeof(stu[0]), struct_cmp_byage);
    for (i = 0; i < sz; i++)
    {
        printf("%s %d\n", stu[i].name, stu[i].age);
    }
}

到此这篇关于一文带你学会C语言中的qsort函数的文章就介绍到这了,更多相关C语言 qsort函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯