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的理解的主要内容,如果未能解决你的问题,请参考以下文章