马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
学习c语言的过程中少不了的就是排序,比方冒泡排序(不清楚的同学可以翻找一下之前的文章),
我们这里将冒泡排序作为一个自界说函数来出现一下
- #include<stdio.h>
- void bubble_sort(int arr[], int len)
- {
- for (int i = 0; i < len - 1; i++)
- {
- for (int j = 0; j < len - 1 - i; j++)
- {
- if (arr[j] > arr[j + 1])
- {
- int t = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = t;
- }
- }
- }
- }
- void Print(int arr[], int len)
- {
- for (int i = 0; i < len; i++)
- {
- printf("%d ", arr[i]);
- }
- }
- int main()
- {
- int arr[] = { 14,32,62,54,23,61,9,67,83,0,34,10,89 };
- int len = sizeof(arr) / sizeof(arr[0]);
- bubble_sort(arr, len);
- Print(arr, len);
- return 0;
- }
复制代码 这里的自界说函数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企服之家,中国第一个企服评测及商务社交产业平台。 |