iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >一文带你学会C语言中的qsort函数
  • 229
分享到

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

C语言qsort函数C语言qsort 2022-12-21 09:12:27 229人浏览 泡泡鱼
摘要

目录铺垫知识使用qsort函数进行整型数组的排序使用qsort函数进行浮点型数组的排序使用qsort函数进行结构体数组的排序铺垫知识 qsort函数 参数类型  

铺垫知识

qsort函数

参数类型    

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

参数类型解释

  • 参数1 待排序数组首元素的地址
  • 参数2 数组内元素个数
  • 参数3 数组内每个元素大小,单位是字节
  • 参数4 函数指针,由自己实现,内容是两个元素的比较方法

void* 

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

void*的注意事项    

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

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

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

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

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

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

  • 正序排序时,e1>e2,返回大于0的数,e1==e2,返回0,e1<e2,返回小于0的数
  • 逆序排序时,e1>e2,返回小于0的数,e1==e2,返回0,e1<e2,返回大于0的数

当然,我们可以用强制类型转换后,就知道了步长,使用减法来比较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函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文带你学会C语言中的qsort函数

本文链接: https://www.lsjlt.com/news/175393.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文带你学会C语言中的qsort函数
    目录铺垫知识使用qsort函数进行整型数组的排序使用qsort函数进行浮点型数组的排序使用qsort函数进行结构体数组的排序铺垫知识 qsort函数 参数类型  ...
    99+
    2022-12-21
    C语言 qsort函数 C语言 qsort
  • 一文带你学习C++中的虚函数
    目录概念语法使用总结概念 虚函数是一种具有特殊属性的成员函数,它可以被子类重写,并在运行时确定调用哪个方法。为了定义一个虚函数,将在该函数的声明中使用关键字virtual。当调用一个...
    99+
    2023-05-19
    C++虚函数 C++函数
  • 一篇文章带你入门C语言:函数
    目录函数定义库函数定义介绍Example 1 strcpyExample 2 memset自定义函数Example 1Example 2 两数交换链式访问Example 1函数声明函...
    99+
    2024-04-02
  • 一文带你学会MySQL的select语句
    目录SQL概述SQL背景知识SQL语言排行榜SQL 分类SQL语言的规则与规范基本规则SQL大小写规范 (建议遵守)注释命名规则(暂时了解)数据导入指令基本的SELECT语句SELECT...SELECT ......
    99+
    2024-04-02
  • 一文带你学习一下C++中的构造函数
    目录C++构造函数学习1.带参数的构造函数2.多个构造函数3.拷贝构造函数C++构造函数学习 构造函数是一种特殊的函数,它用于在创建对象时初始化对象的值。所有的类都有构造函数,但如果...
    99+
    2023-05-19
    C++构造函数的使用 C++构造函数学习 C++构造函数 C++ 函数
  • C语言库函数中qsort()的用法
    目录(一)void*  的指针类型是什么?(二)void qsort(void*, size_t, size_t, int ( * )(const void * ,  const v...
    99+
    2024-04-02
  • 一文带你学习C++析构函数
    目录C++析构函数的学习析构函数的基本使用多个析构函数的使用继承中的析构函数总结C++析构函数的学习 在C++中,析构函数是一种特殊类型的成员函数,用于在对象生命周期结束时被自动调用...
    99+
    2023-05-19
    C++析构函数的使用 C++析构函数学习 C++析构函数 C++ 函数
  • 一篇文章带你了解C语言函数递归
    目录什么是递归?递归的两个必要条件递归实例实例1(按照顺序打印一个数的整形值)画图讲解 完整代码 实例2 (使用函数在不创建变量的情况下求字符串长度)画图讲解程序...
    99+
    2024-04-02
  • C语言的qsort()函数如何使用
    本文小编为大家详细介绍“C语言的qsort()函数如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的qsort()函数如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言 qsort...
    99+
    2023-06-30
  • C语言带你学会位段相关知识
    目录一、什么是位段二、位段的内存分配三、位段的跨平台问题四、位段的应用五、总结与提炼一、什么是位段 位段的声明和结构是类似的,有两个不同: 位段的成员必须是 int、unsigned...
    99+
    2023-05-15
    C语言位段操作 C语言位段作用
  • 一篇文章带你了解C语言文件操作中的几个函数
    目录总结fopen:有两个参数,第一个是要被打开或者被创建的文件名,第二个是以什么方式打开。这两个参数要分别用双引号括起来 打开文件和关闭文件的基本流程,关闭文件之后要置空 f...
    99+
    2024-04-02
  • 一篇文章带你了解C语言函数的可重入性
    目录一、不可重入函数。二、可重入函数。三、如何写出可重入的函数四、函数的可重入性和线程安全的关系五、malloc和printf为什么不可重入总结一、不可重入函数。 在函数中如果我们使...
    99+
    2024-04-02
  • 一篇文章带你实现C语言中常用库函数的模拟
    目录前言函数介绍strlen(求字符串长度)strcpy(字符串拷贝)strcat(字符串追加)strcmp(字符串比较)strstr(找子字符串)memcpy(内存拷贝)memmo...
    99+
    2024-04-02
  • 一篇文章带你入门C语言:数组
    目录数组一维数组初始化使用总结:内存存储二维数组创建初始化数组越界问题数组作函数参数应用实例总结数组 一维数组 创建 定义 数组是一组相同类型的元素的集合。那数组的语法形式: t...
    99+
    2024-04-02
  • 一文带你学会Spring JDBC的使用
    目录1、JDBC2、使用2.1、配置数据源2.2、HikariCP2.3、JdbcTempLate1、JDBC JDBC 就是 数据库开发 操作的 代名词,因为只要是现代商业项目的开...
    99+
    2024-04-02
  • C语言库函数qsort的使用详解
    目录一、回调函数二、库函数qsort三、使用qsort排序整型数组四、使用qsort排序结构体1、使用qsort排序结构体中的字符成员2、使用qsort排序结构体中的整型成员五、基于...
    99+
    2024-04-02
  • C语言中回调函数和qsort函数的用法详解
    目录回调函数指向函数指针数组的指针qsort(qulick sort)-库函数回调函数 通过函数指针调用的函数,如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调...
    99+
    2024-04-02
  • C语言中qsort函数的介绍与用法实例
    目录一.qsort函数是什么 二.使用qsort排序-以升序为例1.整形数组排序2.字符数组排序3.字符指针数组排序4.结构体数组排序5.浮点型数组排序三.使用冒泡排序思想...
    99+
    2024-04-02
  • C语言中关于库函数 qsort 快排的用法
    目录前言一、库函数(qsort)的含义二、(qsort)函数的实现方式,话不多说,请看。1. 第一个参数2. 第二个参数3. 第三个参数4. 第四个参数1). 函数的参数2). 这第...
    99+
    2024-04-02
  • C语言详细讲解qsort函数的使用
    目录qsort1.int型2.float型3.struct型qsort 功能:Performs a quick sort.(快速排序)参数:void qsort( void *bas...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作