admin管理员组文章数量:1794759
qsort()中cmp函数的一些使用方法(C语言)
作为个人的学习心得记录,写的不正确的地方欢迎指正啊!
一、基本形式cmp作为一个比较函数,可以简单方便的对bsearch、qsort等函数提供交换依据。 它的基本形式为:
int cmp(const void *a ,const void *b);可见: 1、cmp()会返回int型返回值; 2、cmp()带有两个指针型形式参数const void * 其中,const为一个限定词,含有const限定词的参数,尤其是以指针传递地址的参数,不会改变其原本的值。 void *,为一个无类型指针,既可以通过强制类型转换,使其转换为任意类型的指针,甚至直接取指向的数据值。
二、使用方法对于qsort中
int cmp(const void *a ,const void *b) { ... }cmp()会有三种返回值(以qsort为例): 1、返回一个正数:a排列在b之后; 2、返回0:a、b相等; 3、返回一个负数:a排在b之前;
因此,我们可以由此得出一些基本的使用方法;
(一)对int数组升序排序
int cmp(const void *a ,const void *b) { return *(int *)a-*(int *)b; }(二)对double数组升序排序 以上方法对double型则不适用,因为cmp返回值为int型,若两个小数差距极小,例如:a=0.15 ,b=0.14,将会被强制转换为0返回,不发生交换
int cmp(const void * a,const void *b) { if( *( double* )a > *( double * )b ) return 1; else if( *( double* )a < *( double * )b ) return -1; return 0; }(三)对字符串按字典序排序
#include <string.h> int cmp(const void *a ,const void *b) { return strcmp( (char *)a , (char *)b ); }例:
#include <stdio.h> #include <stdlib.h> #include <string.h> int cmp(const void *a ,const void *b) { return strcmp( (char *)a , (char *)b ); } int main() { char A[4][6]={ "abcde", "aacde", "accde", "bcdef" }; qsort(A,4,sizeof(A[0]),cmp); for(int i=0 ; i<4 ; i++) printf("%s\\n",A[i]); } /*输出: aacde abcde accde bcdef */(四)对结构体升序排序
typedef struct { int A; double B; char C[]; }Sructure; int cmp(const void * a,const void *b) { //对int的引用 return (*(Sructure *)a).A-(*(Sructure *)a).B; //对double的引用 if( (*( Sructure* )a).B > (*( Sructure* )b).B ) return 1; else if( (*( Sructure* )a).B < (*( Sructure* )b).B ) return -1; return 0; //对字符串字典序排序 return strcmp( (*(Sructure *)a).C , (*(Sructure *)b).C ) } 三、作为一个新手,极其欢迎大家补充!!!版权声明:本文标题:qsort()中cmp函数的一些使用方法(C语言) 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686493512a73707.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论