qsort函数

打印 上一主题 下一主题

主题 1701|帖子 1701|积分 5103

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学习c语言的过程中少不了的就是排序,比方冒泡排序(不清楚的同学可以翻找一下之前的文章),
我们这里将冒泡排序作为一个自界说函数来出现一下
  1. #include<stdio.h>
  2. void bubble_sort(int arr[], int len)
  3. {
  4.         for (int i = 0; i < len - 1; i++)
  5.         {
  6.                 for (int j = 0; j < len - 1 - i; j++)
  7.                 {
  8.                         if (arr[j] > arr[j + 1])
  9.                         {
  10.                                 int t = arr[j];
  11.                                 arr[j] = arr[j + 1];
  12.                                 arr[j + 1] = t;
  13.                         }
  14.                 }
  15.         }
  16. }
  17. void Print(int arr[], int len)
  18. {
  19.         for (int i = 0; i < len; i++)
  20.         {
  21.                 printf("%d ", arr[i]);
  22.         }
  23. }
  24. int main()
  25. {
  26.         int arr[] = { 14,32,62,54,23,61,9,67,83,0,34,10,89 };
  27.         int len = sizeof(arr) / sizeof(arr[0]);
  28.         bubble_sort(arr, len);
  29.         Print(arr, len);
  30.         return 0;
  31. }
复制代码
这里的自界说函数bubble_sort()完成的是排序,但是这里要足注意,我们的形参是限定死的int类型数据,那么假如我们想要排序字符数组、浮点数、结构体,这些都无法完成,
那么假如我们想要排序这些东西怎么办呢,
c语言给的库函数中qsort可以完成,
这里值得一提的是,qsort利用的是快速排序(这里不需要了解快速排序原理,与冒泡排序所达到的效果是一致的,只不过过程不同而已),
 

我们来看一下qsort函数的参数,(第四个参数为函数指针,我们要往内里传递函数地点),
下面是对qsort函数参数的解读,

base-指向待排序数组的第一个元素的指针,
num-base指向数组中元素的个数,
size-base指向的数组中一个元素的巨细,单位为字节,
compar-
        这里我们先来想一下,假如改写一开始写的冒泡排序来让它实现字符串的排序、浮点型数            组的排序、甚至是排序结构体数组,我们应该改写哪一部分,起首,循环的趟数不需要改          变,每趟需要比力的次数也是稳固的,那么需要改的就是每次比力,怎样比力,对于数字可          以用大于小于号,但是字符串呢,结构体呢,甚至说内部的交换也不能简单的使用赋值号来         举行,我们所需要改的即下面显示的部分,

        那么compar就是指向一个函数,这个函数是用来比力两个数据的,
        也就是说,当你想要使用qsort函数的时候,你只需要传进去一个你想要怎样比力两个数据的          函数,qsort按照你的方法比就可以了,如许就实现了比力各种数据,
下面我们来看看怎样使用qsort函数,
我们先对照上面的冒泡排序对其举行一个简单的改写,

这是对整型数组的排序,下面来看看假如是对结构体改怎样使用,

注意:void*指针不能解应用,那么我们使用的时候需要逼迫转化一下
这里运用到了箭头操纵符,可以简单理解为使用指针调用结构体成员时使用的操纵符,不了解的小伙伴可以参考一下之前的文章,
不太清楚strcmp的小伙伴可以看一下,这里我们来简单先容一下strcmp,

它的返回类型为int类型,

返回类型正好与我们的qsort函数第四个变量所需要的返回值一致,所以我们可以简化返回值部分的内容,
这里用strcmp排序名字的时候要注意,名字排序不是按照名字的是非举行排序的,是从第一个字母开始比力其ASCll码表对应的值,当两者出现不同数值时,后面
注意使用strcmp时,需要包含头文件#include<string.h>
到这里,我们的qsort函数就基本先容完了。





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

何小豆儿在此

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表