• qsort () 库函数


    标准库

    C标准库------>   

     声明

    void __cdecl qsort(void *_Base, size_t _NumOfElements, size_t _SizeOfElements,     _CoreCrtNonSecureSearchSortCompareFunction _CompareFunction)
    void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
    

    这两个是一样的 

    参数 

    第一个void 代表了qsort() 不返回任何值

    __cdecl 是用来声明在动态链接库里面的函数原型,一般不用管

    ------------------------------------------------------------------------------------

    第一个参数是 你要排序的数组的地址,或者是数组第一个元素的地址

    第二个参数是  你要排序的元素个数

    第三个参数是 排序的每个元素的大小---单位为字节

    第四个参数是 比较两个元素的函数或者是它的地址(函数指针)

    比较函数 

    qsort可以对结构体、一维int数组、二维int数组、一维字符数组、二维字符数组排序

    是因为接收参数时用void * 指针接收,所有其它类型的指针都可以隐式转换为空类型指针 ,而空类型指针只存储地址的值,没有类型,在需要的时候可以强制类型转换成特定的类型,这样就可以对不同类型排序了

    当然还有核心,就是比较函数,在什么时候需要改变两个元素的位置呢 ?这就是比较函数完成的事 记住比较函数的参数一定是const void *类型的,因为在头文件定义中就是这样,如若不然,就会报错

    1. int compare_int(const void * a, const void * b)
    2. {
    3. int *a1 = (int*)a;
    4. int *b1 = (int*)b;
    5. return (*a1) - (*b1);
    6. }

    这个函数只能用来比较两个int 变量 也就是当参数 是这个函数时,可以对int一维数组排序

     如果compar_int返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的前面 如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定 如果compar返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的后面

     具体使用

    排序一个一维int 数组

    1. #include <iostream>
    2. #include <stdlib.h>
    3. using namespace std;
    4. int compare_int(const void * a, const void * b)
    5. {
    6. int *a1 = (int*)a;
    7. int *b1 = (int*)b;
    8. return (*a1) - (*b1);
    9. }
    10. int main(void)
    11. {
    12. int arr[] = { 85,64,14,28,99,42,20,1,57,98,74 };
    13. qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int),&compare_int);
    14. //qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), compare_int); //或者是没有&,因为函数名就是函数的地址
    15. for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    16. {
    17. cout << arr[i] << " ";
    18. }
    19. return 0;
    20. }

  • 相关阅读:
    【力扣2656】K个元素的最大和
    K8S-存储(ConfigMap、Secret、Volume、PVC/PV)
    # 用飞书来谈恋爱,飞书机器人定时给女朋友问好
    关于亚马逊测评,你了解多少?
    阿里云RDS关系型数据库详细介绍_多版本数据库说明
    vulnhub之Nagini
    JAVA在线课程教学大纲系统计算机毕业设计Mybatis+系统+数据库+调试部署
    基于JSP的鲜花商城源码
    Error: node: unknown or unsupported macOS version: :dunno 错误解决
    Spring Security 在登录时如何添加图形验证码
  • 原文地址:https://blog.csdn.net/qq_66805048/article/details/132969233