qsort函数怎么用(c语言 qsort)
本文目录
c语言 qsort
排序方法有很多种,选择排序,冒泡排序,归并排序,快速排序等。看名字都知道快速排序是目前公认的一种比较好的排序算法(我没听书速度比这快的了,特殊场合例外),比选择排序,冒泡排序都要快。这是因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。这就是qsort。qsort要求提供一个比较函数,是为了做到通用性更好一点。比如你不仅仅的是要排序一个数字而已,可能你要用来排序几个数字,比如有一个结构structnum{inta;intb;};然后我有一个num类型的数组,numdddd;我想给dddd这个数组排序,那怎么办?我想让a+b最大的num元素排在数组的最前面,那又怎么办?这都可以通过定义比较函数来做到的。比较函数的作用就是给qsort指明元素的大小是怎么比较的。像这样的比较函数inlineintMyCmp(constvoid*a,constvoid*b)都是有两个元素作为参数,返回一个int值,如果比较函数返回大于0,qsort就认为a》b,如果比较函数返回等于0qsort就认为a和b这两个元素相等,返回小于零qsort就认为a《b。qsort知道元素大小,就可以把大的放到前面去。如果你的比较函数放回本来应该是1的(a》b),你比较函数却返回一个-1(小于零的)那么qsort认为a《b的,就把b放到前面去,但实际上是a大于b的,所以就造成升降序的差别了。同样的道理,如果有一个结构strunt人{int身高;int体重;}你想让身高最小的人排在最前面,那么你也要自己定义自己的比较函数,
qsort具体用法
六类qsort排序方法前一段时间做题觉得qsort函数很好用,但有时不太会用比如按结构体一级排序、二级排序、字符串排序等,故通过查资料将其整理一番。以下是其具体分类及用法(若无具体说明是以降序排列):1、对一维数组排序:(Element_type是一位数组中存放的数据类型,可以是char, int, float, double, etc )int Comp(const void *p1,const void *p2 ){return *((Element_type *)p2) 》 *((Element_type *)p1) ? 1 : -1;}int main(){Element_type list:struct Node{int x;int y;}s;//按照x从小到大排序,当x相等时按y从大到小排序int Comp(const void *p1,const void *p2){struct Node *c = (Node *)p1;struct Node *d = (Node *)p2;if(c-》x != d-》x) return c-》x-d-》x;else return d-》y - c-》y;}5、对结构体中字符串进行排序:struct Node{int data;char str;}s;//按照结构体中字符串 str 的字典序排序int Comp(const void *p1,const void *p2){return strcmp((*(Node *)p1).str,(*(Node *)p2).str);}qsort(s,100,sizeof(s,Comp);6、计算几何中求凸包的Comp//以下是俺从别人那儿抄来的,暂时还没用过int Comp(const void *p1,const void *p2)//重点Comp函数,把除了1点外的所有的点旋转角度排序{struct point *c=(point *)p1;struct point *d=(point *)p2;if( cacl(*c, *d,p) 《 0) return 1;else if(!cacl(*c, *d, p) && dis(c-》x,c-》y,p.x,p.y) 《 dis(d-》x,d-》y,p.x,p.y ) )//如果在一条直线上,则把远的放在前面return 1;else return -1;}P.S.:qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分发写的,其时间复杂度为n*log(n),其结构为:void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *));其中:*base 为要排序的数组nelem 为要排序的数组的长度width 为数组元素的大小(一字结为单位)(* Comp)(const void *p1,const void *p2) 为判断大小函数的指针,这个函数需要自己定义,如果p1》p2,函数返回-1;a《b,函数返回1;a==b函数返回0
C语言中qsort函数怎么用
qsort函数是编译器函数库自带的快速排序函数。qsort 的函数原型是:void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 它的参数为: 1 待排序数组首地址2 数组中待排序元素数量3 各元素的占用空间大小4 指向函数的指针,用于确定排序的顺序它在使用的时候需要包含头文件:stdlib.h实例:#include《stdio.h》#include《stdlib.h》int comp(const void*a,const void*b){return *(int*)a-*(int*)b;}int main(){int *array;int n;scanf(“%d“,&n);array=(int*)malloc(n*sizeof(int));int i=0;for(;i《n;i++){scanf(“%d“,(array+i));}qsort(array,n,sizeof(int),comp);for(i=0;i《n;i++){printf(“%d\t“,array);}return0;}
更多文章:
myeclipse新建java工程(Java 用MyEclipse 代码怎么写)
2024年9月9日 07:01
matlab计算函数值编程(用matlab编写M文件,计算函数值)
2024年7月22日 09:07
oracle跨库关联查询(数据库Oracle跨越数据库的不同实例之间创建link后,我就可以实现查询,这个我会,但是现在,本)
2024年7月8日 18:05
plsql连接数据库ip:端口 实例(中如何使用直连方式连接Oracle数据库)
2024年6月29日 10:43
美国socks5代理最新(SOCKS5代理服务器的地址和端口各是什么)
2024年7月1日 02:53
oracle查看数据库32位(查看oracle是32位还是64位)
2024年10月13日 16:15
jsp怎么导入文件夹(如何在jsp引入js文件下的所有文件)
2024年7月25日 11:01