• 重生之我是一名程序员 34


    哈喽啊大家晚上好!

    今天给大家带来的知识是——库函数qsort。首先,给大家介绍一下qsort函数, qsort函数是C标准库中的一种排序函数,用于对数组中的元素进行快速排序。它接受四个参数:待排序数组的基地址,数组中元素的个数,每个元素的大小,以及一个函数指针,该函数指定了比较两个元素的规则。qsort将按照指定的规则对数组进行排序,并在排序完成后返回排序后的数组。

    想必大家还记得之前我给大家讲过一道C语言中的经典题目——起泡排序法(又叫冒泡排序法),之前我在给大家讲这道题目时是使用了for循环嵌套来实现的,但是今天我们知道了qsort函数,我们就可以使用此函数来实现起泡排序法,会更加的简洁。下面我先给大家说说如何使用qsort函 数,qsort函数用于对数组进行快速排序。它的原型如下:

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

    其中:

    • base是要排序的数组的指针;
    • num是数组中元素的个数;
    • size是每个元素的大小(以字节为单位);
    • compare是一个指向函数的指针(简称函数指针),用于比较两个元素的大小关系。

    使用qsort函数首先需要定义一个比较函数,它的返回值是一个整数:

    1. int compare(const void* a, const void* b) {
    2. // 比较的逻辑,返回一个整数
    3. }

    比较函数的参数类型为const void*,也就是指向任意类型数据的指针,因此在函数内部需要先将指针转换为对应类型的指针,然后再进行比较。

    下面我给大家举一个例子,方便大家更好的认识怎么使用qsort函数,例如:使用qsort函数排序一个整形数组,代码如下:

    1. #include
    2. //qosrt函数的使⽤者得实现⼀个⽐较函数
    3. int int_cmp(const void * p1, const void * p2)
    4. {
    5. return (*( int *)p1 - *(int *) p2);
    6. }
    7. int main()
    8. {
    9. int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
    10. int i = 0;
    11. qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);
    12. for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++)
    13. {
    14. printf( "%d ", arr[i]);
    15. }
    16. printf("\n");
    17. return 0;
    18. }

    其中,在比较函数中,如果p1-p2大于0的话则进行数组中的两个数的比较和排序(升序),如果想降序输出的话,把return语句中的p1,p2进行交换即可。

    好啦,那么到此想必大家也了解怎么使用qsort函数了,那现在我们就用qsort函数来优化起泡排序法吧,如下:

    1. ```
    2. #include
    3. #include
    4. // 比较函数
    5. int compare(const void *a, const void *b) {
    6. return (*(int *)a - *(int *)b);
    7. }
    8. int main() {
    9. int arr[] = {3, 1, 5, 2, 4};
    10. int n = sizeof(arr) / sizeof(arr[0]);
    11. // 使用qsort函数进行排序
    12. qsort(arr, n, sizeof(int), compare);
    13. // 输出排序后的结果
    14. for (int i = 0; i < n; i++) {
    15. printf("%d ", arr[i]);
    16. }
    17. printf("\n");
    18. return 0;
    19. }
    20. ```

    这里呢跟上面的排序整形数组是差不多的,但需要注意,我们在使用qsort函数时需要引用头文件

    #include,不然编译器会报警告哦!

    那么,今天的知识分享就到此结束啦,感谢大家支持,大家明天见啦!

  • 相关阅读:
    Prometheus插件安装(cadvisor)
    【力扣hot100】刷题笔记Day15
    C++------继承
    流量录制回放工具jvm-sandbox-repeater入门篇——录制和回放
    BHQ-2 NH2 CAS:1241962-11-7使用作为各种荧光共振能量转移(FRET)DNA检测探针中
    实用新型专利的特点是什么
    蓝桥杯 大小写转换
    知识蒸馏基本原理
    kafka命令之消费者组
    视频监控系统/视频汇聚平台EasyCVR平台页面展示优化
  • 原文地址:https://blog.csdn.net/StarslxYzxcvbnm/article/details/134483596