当前位置:   article > 正文

C语言 - 冒泡排序和qsort库函数的对比使用

C语言 - 冒泡排序和qsort库函数的对比使用

1.冒泡排序

下面的代码限制比较大,只适用于整形数据的排序
注:排列不同类型数据时,比较方法需要改变

  1. void bubble_sort(int arr[], int sz)
  2. {
  3. int i = 0;
  4. //进去for循环一次,是一趟冒泡排序
  5. for (i = 0; i < sz - 1; i++)
  6. {
  7. //一趟冒泡排序
  8. int j = 0;
  9. for (j = 0; j < sz - 1 - i; j++)
  10. {
  11. if (arr[j] > arr[j + 1])
  12. {
  13. //交换
  14. int temp = arr[j];
  15. arr[j] = arr[j + 1];
  16. arr[j + 1] = temp;
  17. }
  18. }
  19. }
  20. }
  21. void print_arr(int arr[], int sz)
  22. {
  23. int i = 0;
  24. for (i = 0; i < sz; i++)
  25. {
  26. printf("%d ", arr[i]);
  27. }
  28. printf("\n");
  29. }
  30. int main()
  31. {
  32. //排列成升序
  33. int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
  34. int sz = sizeof(arr) / sizeof(arr[0]);
  35. print_arr(arr, sz);
  36. bubble_sort(arr,sz);
  37. print_arr(arr, sz);
  38. return 0;
  39. }

2.库函数qsort

qsort是C语言标准库中的一个函数,可用于整形数据、字符串数据、数组进行排序。

基本结构:

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

  • base:放的是待排序数组中第一个元素的地址
  • num:待排序的数据元素个数
  • size:排序数组中一个元素有多大,单位是字节
  • int( *compare)(const void*,const void*):是用来比较待排序数据中的2个元素的函数 

例1:使用qsort对整形数据进行排序

  1. #include <stdlib.h>
  2. void print_arr(int arr[], int sz)
  3. {
  4. int i = 0;
  5. for (i = 0; i < sz; i++)
  6. {
  7. printf("%d ", arr[i]);
  8. }
  9. printf("\n");
  10. }
  11. void cmp_int(const void* e1, const void* e2)
  12. {
  13. return *(int*)e1 - *(int*)e2;
  14. }
  15. int main()
  16. {
  17. //整形数据的排序
  18. int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
  19. int sz = sizeof(arr) / sizeof(arr[0]);
  20. //排序
  21. qsort(arr, sz, sizeof(arr[0]), cmp_int);
  22. //打印
  23. print_arr(arr, sz);
  24. return 0;
  25. }

例2:使用qsort对结构体进行排序

  1. #include <string.h>
  2. struct Stu
  3. {
  4. char name[20];
  5. int age;
  6. };
  7. int sort_by_age(const void* e1, const void* e2)
  8. {
  9. return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age; //强制类型转换为结构体类型
  10. }
  11. int sort_by_name(const void* e1, const void* e2)
  12. {
  13. return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name) ; //强制类型转换为结构体类型
  14. }
  15. int main()
  16. {
  17. //使用qsort函数排序结构体数据
  18. struct Stu s[] = { { "Li1", 30 }, { "Li2", 34 }, { "Li3", 20 } };
  19. int sz = sizeof(s) / sizeof(s[0]);
  20. 按照年龄来排序
  21. //qsort(s, sz, sizeof(s[0]), sort_by_age);
  22. //按照名字来排序
  23. qsort(s, sz, sizeof(s[0]), sort_by_name);
  24. return 0;
  25. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/982910
推荐阅读
相关标签
  

闽ICP备14008679号