qsort 调用技巧
来源:互联网 发布:淘宝宝贝上架时间查询 编辑:程序博客网 时间:2024/05/29 03:53
//所在头文件 :stdlib.h//<本文中排序都是采用的从小到大排序>/*这里的原理是将值返回给qsort函数,比较函数返回大于0,qsort就认为 a>b , 如果比较函数返回等于0 qsort就认为a 和b 这两个元素相等,返回小于零 qsort就认为 a<b*/
0.主函数
int main() { qsort(数组的首地址,需要排序的数量,sizeof(A[0]),cmp); return 0; }
1.对于int型数组进行排序
int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; }
2.对于char型数组进行排序(其基本原理同int型数组排序)
int cmp(const void *a ,const void *b) { return *(char *)a-*(char *)b; }
3.对于double型数组进行排序(注意 double型不能偷懒返回a-b(因为a-b是double型)
int cmp(const void *a ,const void *b) { return *(double *)a>*(double *)b?1:-1; }
4.对于结构体数组一级进行排序
typedef struct { int data; int other; } name;//类似该结构体即可 name test[100]; int cmp(const void *a ,const void *b) { return (*(name *)a).data-(*(name *)b).data; }//排序关键字就是data(注意若为浮点型关键字,请仿照double写返回值语句)
5.对于结构体数组二级进行排序
//基本原理是当第一个关键字相同时,利用第二个关键字比较name test[100];int cmp(const void *a ,const void *b){ name *M=(name* )a,N=(name* )a; if(M->other!=N->other) return other->m-N->other; else return M->data!=N->data;}}//(注意若为浮点型关键字,请仿照double写返回值语句)/*一般这个时候都在cmp函数里面先强制转换了类型,不要在return里面,这样程序会更清晰,并且绝对是没错的.*/6.对字符串进行排序
1.普通二维数组存放
int cmp(const void*a,const void*b) { return strcmp((char *)a,(char *)b); } qsort(数组的首地址,需要排序的数量,sizeof(A[0]),cmp);
程序示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> int cmp(const void*a,const void*b) { return -strcmp((char *)a,(char *)b); } char c[10][10]; int main() { int i,j; for(i=5;i>=0;i--) for(j=0;j<7;j++) c[i][j]=i+'A'; printf("排序前\n"); for(i=0;i<=5;i++) puts(c[i]); qsort(c,6,sizeof(c[0]),cmp); printf("排序后\n"); for(i=0;i<=5;i++) puts(c[i]); return 0; }
2.用结构体存储
struct In { int data; char str[100]; }s[100]; //按照结构体中字符串str的字典顺序排序 int cmp ( const void *a , const void *b ) {return strcmp( (*(In *)a)->str , (*(In *)b)->str );} qsort(s,100,sizeof(s[0]),cmp);//原理同上
七、计算几何中求凸包的cmp//尚未验证
int cmp(const void *a,const void *b)//重点cmp函数,把除了1点外的所有点,旋转角度排序{struct point *c=(point *)a;struct point *d=(point *)b;if( calc(*c,*d,p[1]) < 0) return 1;else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y))//如果在一条直线上,则把远的放在前面 return 1;else return -1;}
0 0
- qsort 调用技巧
- 调用qsort()的排序函数
- C/C++ 调用 qsort/sort
- uva10132 字符串数组的qsort排序技巧
- 关于调用qsort的几种用法
- qsort函数的调用与实现
- 调用库函数进行的qsort快速排序
- 函数库的排序调用 sort qsort
- QSORT
- qsort
- QSort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- 2022海选女主角
- mybatis ehcache的一点小记
- eclipse jad 反编译 插件安装
- Json解析较为复杂的数据(Map中含有List)从服务器获取城市数据实现三级联动
- MyEclipse取消验证Js的两种途径【转】
- qsort 调用技巧
- Hibernate初识
- 控制SessionMap失效
- 函数,this,局部变量
- C语言基础 printf输出限制小数点位数
- Android中不显示标题和设置Layout布局中背景颜色
- Interesting!
- Python爬虫----1
- ViewPager和Fragment的嵌套使用