标签:p2 p1 const 语言 int void qsort 用法 cmp
1.首先了解
int cmp(const void* a, const void* b)
表示声明cmp函数,其返回值为int型,参数为两个不可修改(const)的void型指针
2.函数原型
函数声明
void qsort(void *base, number, size, int (*cmp)(const void *p1, const void*p1))参数
- base-- 指向要排序的数组的第一个元素的指针。//一般填写数组名
- number-- 由 base 指向的数组中元素的个数。
- size-- 数组中每个元素的大小,以字节为单位。
- cmp-- 用来比较两个元素的函数.
return
*(
int
*)p2-*(
int
*)p2;}//这个是由小到大排序,return *(int *)p2 - *(int *)p1; 为由大到小排序。
如果cmp返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的左边;如果cmp返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定;
如果cmp返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的右边。 3.调用该函数需要声明 #include<stdlib.h> 4.对二维数组进行排序,本质是对每行的首地址元素进行排序
#include<stdio.h> #include<stdlib.h> int comp(const void*a,const void*b) { return ((int*)a)[0]-((int*)b)[0]; } int main() { int i,j; int a[1000][2]; int n; scanf("%d",&n);//假设n=3 for(i=0;i<n;i++) for(j=0;j<2;j++) scanf("%d",&a[i][j]);//假设输人4,2,1,3,5,6
//实际是对4,1,5进行排序 qsort(a,n,sizeof(int)*2,comp); for(i=0;i<n;i++) for(j=0;j<2;j++) printf("%d \n",a[i][j]);//输出1,3,4,2,5,6 return 0; }
5.对结构体中的某个元素排序
#include<stdio.h> #include<stdlib.h> struct In { int data; int other; }s[100]; int cmp( const void *a ,const void *b) { // return (*(In *)a).data > (*(In *)b).data ? 1 : -1; //转自大佬.. //注意,这条语句在VC6.0环境下运行可能会出错,但是并不是语句错了,而是你要先 Build ,或者全部重建。总之语句是对的。 // 或者你可以将这上面1条语句改成下面这3条语句 struct In *aa = (In *)a; struct In *bb = (In *)b; return aa->data > bb->data ? 1 : -1;//data可以换成结构体中的其他项 } int main() { int n,i; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&s[i].data,&s[i].other); qsort(s,n,sizeof(s[0]),cmp); for(i=0;i<n;i++) printf("%d\n",s[i].data); return 0; }
标签:p2,p1,const,语言,int,void,qsort,用法,cmp 来源: https://www.cnblogs.com/zhuimingzhenbai/p/12374326.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。