码迷,mamicode.com
首页 > 其他好文 > 详细

qsort的理解

时间:2017-11-09 19:44:04      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:style   ase   技术分享   img   二维数组   返回   理解   ons   http   

qsort:快速排序函数

使用格式:

void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针
头文件:<stdlib.h>
拆分详解
最后一个参数可以理解为排序的一句,可以在外面写一个用于确定排序的后顺序的函数。需要根据返回值来确定
技术分享
几个常用的比较函数
一维数组:
 1 /*一维数组从小到大*/
 2 int cmp(const void *a,const void *b)
 3 {
 4     return *(int*)a-*(*int)b;
 5 }
 6 /*一维数组从大到小*/
 7 int cmp(const void *a,const void *b)
 8 {
 9     return *(*int)b-*(int*)a;
10 }

二维数组:

1 /*二维数组按照第二行元素从小到大排序*/
2 int cmp(const void*a,const void*b)
3 {
4     return ((int*)a)[1]-((int*)b)[1];
5 }

字符串:

1 int Comp(const void*p1,const void*p2)
2 {
3     return strcmp((char*)p2,(char*)p1);
4 }

结构体:

一个元素:

1 int cmp(const void*p1,const void*p2)
2 {
3     return (*(Node*)p2).data>(*(Node*)p1).data?1:-1;
4 }

多个元素:

 1 int cmp(const void*p1,const void*p2)
 2 {
 3     if(p1->x!=p2->x)
 4     {
 5         return p1->x-p2->x;
 6     }
 7     else{
 8         if(p1->y!=p2->y)
 9         {
10             return p1->y-p2->y;
11         }
12         else
13         {
14                 return p1-z-p2->z;
15         }
16     }
17 }

结构体中的字符串:

1 int cmp(const void*p1,const void*p2)
2 {
3     return strcmp((*(Node*)p1).str,(*(Node*)p2).str);
4 }

如果还有其他排序依据可以在比较函数中处理。

 

qsort的理解

标签:style   ase   技术分享   img   二维数组   返回   理解   ons   http   

原文地址:http://www.cnblogs.com/Young-C/p/7810906.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!