qsort的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
拆分详解
最后一个参数可以理解为排序的一句,可以在外面写一个用于确定排序的后顺序的函数。需要根据返回值来确定
技术分享
几个常用的比较函数
一维数组:
 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的理解的主要内容,如果未能解决你的问题,请参考以下文章

关于qsort函数

快速排序(qsort)

解释 qsort 中的 C 代码行

qsort_b 和 qsort

金蝶handler中 collection 代码片段理解

快排理解