C语言排序神器 | 您所在的位置:网站首页 › c语言递归用法是什么 › C语言排序神器 |
前言 网上有很多关于qsort函数的讲解,其中对于原理的讲解十分复杂,并且实用性不高。因此小编直接从实用性入手,保证看完就会用!大大提高效率并节约您宝贵的时间。 一、头文件 qsort是stdlib.h中的函数,因此使用前需要声明: #include二、格式 1.参数qsort函数包含四个参数,分别是: 1.数组名 2.元素个数(从前往后计算) 3.数组元素所占字节(int,double,char等所占字节) 4.排序原则(递增,递减,奇偶交叉等) int cmp(const void *a,const void *b) { return *(int*)a-*(int*)b; } qsort(num, n, sizeof(int), cmp);2.含义 前三个大概没什么好说的,非常简单。主要介绍下第四个的排序原则。 我们通过定义一个函数cmp,通过cmp返回的参数来确定排序规则,需要注意的是:cmp函数的参数需要以const void *a,const void *b的形式来定义,表示a和b的类型是未确定的,在return中进行强制类型转换为int型。*(int*)a-*(int*)b表示以递增顺序,若想以递减只需将a和b换位。 3.不同类型排序对于不同类型的数组排序,qsort函数的格式都是相同的,唯一不同在于cmp函数中的返回值类型。 1.整型(int) int cmp(const void *a,const void *b) { return *(int*)a-*(int*)b; }2.浮点数(double) 需要注意浮点数会存在精度损失的问题,所以我们需要通过比较,来返回1或-1,以确定是增序还是降序。 int cmp(const void *a,const void *b) { return *(double*)a>*(double*)b?1:-1; }3.字符(char) int cmp(const void *a,const void *b) { return *(char*)a-*(char*)b; }4.结构体 struct node{ int i; double j; char k; }; int cmp(const void *a,const void *b) { return (*(node*)a).i-(*(node*)b).i; }以int为例,其他遵循相同原则;若是要逐级比较,只需增加判断即可。 总结以上便是qsort函数的使用方法,相信大家已经明白如何使用了。下面是简单的例子: #include #include int cmp(const void *a,const void *b) { return *(int*)a-*(int*)b; } int main() { int n,i; scanf("%d",&n); int time[n]; for(i=0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |