• qsort库函数的使用


    目录

    1.认识qsort函数

    2.qsort 排序整型数据

    3.qsort排序字符型数据

    4.qsort排序浮点型数据、

    5.qsort排序结构体数据

    6.总结


    1.认识qsort函数

     注:以上信息来源于cplusplus官网

     翻译以上信息如下:

     qsort函数是c语言标准库中基于快速排序算法实现的一种对数组进行排序的函数,它可以排序任意数据类型。十分简单方便。

    1. //练习使用库函数,qsort排序各种类型的数据
    2. //void qsort (void* base, size_t num, size_t size,int (*compar)(const void*, const void*));

    qsort函数参数如上:


    2.qsort 排序整型数据

    1. #include
    2. #include
    3. int compar_int(const void* e1, const void* e2)
    4. {
    5. return *(int*)e1 - *(int*)e2;
    6. }
    7. int main()
    8. {
    9. int arr1[10] = { 8,9,7,6,5,2,3,1,4,10 };
    10. int sz1 = sizeof(arr1) / sizeof(arr1[0]);
    11. printf("排序前的顺序为:\n");
    12. for (int i = 0; i < 10; i++)
    13. {
    14. printf("%d ", arr1[i]);
    15. }
    16. qsort(arr1, sz1, sizeof(arr1[0]), compar_int);
    17. printf("\n排序后的顺序为:\n");
    18. for (int i = 0; i < 10; i++)
    19. {
    20. printf("%d ", arr1[i]);
    21. }
    22. return 0;
    23. }

    3.qsort排序字符型数据

    1. #include
    2. #include
    3. int compar_char(const void* e1, const void* e2)
    4. {
    5. return *(char*)e1 - *(char*)e2;
    6. }
    7. int main()
    8. {
    9. char arr2[5] = { 'e','d','c','b','a' };
    10. int sz1 = sizeof(arr2) / sizeof(arr2[0]);
    11. printf("排序前的顺序为:\n");
    12. for (int i = 0; i < 5; i++)
    13. {
    14. printf("%c ", arr2[i]);
    15. }
    16. qsort(arr2, sz1, sizeof(arr2[0]), compar_char);
    17. printf("\n排序后的顺序为:\n");
    18. for (int i = 0; i < 5; i++)
    19. {
    20. printf("%c ", arr2[i]);
    21. }
    22. return 0;
    23. }

    4.qsort排序浮点型数据、

    1. #include
    2. #include
    3. int compar_float(const void* e1, const void* e2)
    4. {
    5. return *(float*)e1 - *(float*)e2;
    6. }
    7. int main()
    8. {
    9. float arr3[5] = { 3.14,3.12,5.25,9.58,1.02 };
    10. int sz1 = sizeof(arr3) / sizeof(arr3[0]);
    11. printf("排序前的顺序为:\n");
    12. for (int i = 0; i < 5; i++)
    13. {
    14. printf("%f ", arr3[i]);
    15. }
    16. qsort(arr3, sz1, sizeof(arr3[0]), compar_float);
    17. printf("\n排序后的顺序为:\n");
    18. for (int i = 0; i < 5; i++)
    19. {
    20. printf("%f ", arr3[i]);
    21. }
    22. return 0;
    23. }

    5.qsort排序结构体数据

    1. #include
    2. #include
    3. //定义一个结构体类型
    4. //这个语句是定义了一个结构体类型,它的名字是 student,它的成员变量有两个,
    5. //分别是 char 类型的 name 和 int 类型的 age。
    6. //这个语句可以用来创建一个表示学生信息的数据类型,但它本身并不创建任何对象。
    7. struct student
    8. {
    9. char name[20];
    10. int age;
    11. };
    12. int comapar_student_by_age(const void* e1, const void* e2)
    13. {
    14. return ((struct student*)e1)->age - ((struct student*)e2)->age;
    15. }
    16. int main()
    17. {
    18. struct student arr4[] = { {"zhangsan",20},{"lisi",15},{"jamo",18} };
    19. int sz = sizeof(arr4) / sizeof(arr4[0]);
    20. qsort(arr4, sz, sizeof(arr4[0]), comapar_student_by_age);
    21. for (int i = 0; i < sz; i++)
    22. {
    23. printf("姓名:%s 年龄:%d\n", arr4[i].name, arr4[i].age);
    24. }
    25. return 0;
    26. }

    6.总结

    通过以上代码我们可以看出在main函数主体部分代码基本相当一致,在使用qsort函数的主要部分就是自己写出一个compar函数来确定比较的方法。

    我们来观察一下:

     

     

     我们可以看出我们只需要在compar函数中将需要排序的两个相邻元素e1和e2类型强制转换为对应的数据类型。

    因为void * 空指针不能解引用


    以上就是对qsort函数使用的例子和总结,谢谢支持!

  • 相关阅读:
    ViewPager2 PageTransformer
    机器人制作开源方案 | 智能照科植物花架
    No qualifying bean of type ‘...‘ available错误解决
    小程序开发 - 基本组件
    OKR与个人成长:生活中的 OKR
    【二十】分割Segmentation_Threshold——dyn_threhold()算子
    乐优商城_第3章_-认识微服务(Feign+Zuul)
    Linux(一)最简单的LED驱动程序(应用层和驱动层分析)
    设计模式之观察者模式
    Games101-Chapter13-Ray Tracing 1
  • 原文地址:https://blog.csdn.net/AlanTZT/article/details/132839853