qsort用法举例,qsort库函数
qsort功能的使用-菜鸟的日志-网易博客
qsort函数用法2011-03-28 16:11:26分类:默认分类标签:字号,大中小订阅
六种qsort排序方法
前段时间觉得qsort函数很有用,但是有时候不知道怎么用,比如按结构排序,按字符串排序等等。所以我通过查资料整理了一下。
下面是它的具体分类和用法(如未注明按降序排列):
1.对一维数组进行排序:
(Element_type是存储在一位数组中的数据类型,可以是char、int、float、double等)
int Comp(const void *p1,const void * p2){ return *(Element _ type *)p2)*((Element _ type *)P1)?1 : -1;} int main(){ Element _ type list[MAX];初始(列表);qsort(list,sizeof(list),sizeof(Element_type),Comp);返回0;}复制代码
2.对字符串进行排序:
int Comp(const void *p1,const void * p2){ return strcmp((char *)p2,(char *)P1);} int main(){ char a[max 1][max 2];首字母(a);qsort(a,lenth,sizeof(a[0]),Comp);///lenth复制数组a长度的代码。
3.按结构中的关键字排序(在第一层对结构排序):
结构节点{ double dataint other} s[100];int Comp(const void *p1,const void * p2){ return(*(Node *)p2)。数据(*(节点*)p1)。数据?1 : -1;}qsort(s,100,sizeof(s[0]),Comp);复制代码
4.按结构中的多个关键字排序(按多级排序结构)[以二级为例]:
结构节点{ intxint y;} s[100];//按x从小到大排序,x相等时按y从大到小排序,int comp (constvoid * p1,const void * p2){ struct node * c=(node *)P1;结构节点*d=(节点*)p2;如果(c- x!=d-x)返回c-x-d-else返回d-y-c-}复制代码
5.对结构中的字符串进行排序:
结构节点{ int data字符串[100];} s[100];//sort intcomp (constvoid * p1,const void * p2){ return strcmp((*(node *)P1)。str,(* (node *) p2)。str)根据字符串str在结构中的字典顺序;}qsort(s,100,sizeof(s[0],Comp);复制代码
6.计算几何中凸包的Comp
//以下是我抄袭别人的。我没用过int Comp (const void * p1,const void * p2)//关键Comp函数。按旋转角度{结构点*c=(点*)p1对除1点以外的所有点进行排序;结构点*d=(点*)p2;if( cacl(*c,*d,p[1]) 0)返回1;else if(!CaCl (* 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)/elsereturn-1;}复制代码
附:ANSIC标准中提供了qsort函数,其声明在stdlib.h文件中,按照二次分发编写。其时间复杂度为n*log(n),其结构为:
void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *));复制代码
其中包括:
*base是要排序的数组。
Nelem是要排序的数组的长度。
宽度是数组元素的大小(以单词为单位)。
(* comp) (constvoid * P1,constvoid * P2)是判断大小函数的指针,需要自己定义。如果p1 p2,函数返回-1;a、函数返回1;a==b函数返回0。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。