C语言标准库函数qsort(快速排序函数)

  qsort包含在<stdlib.h>头文件中,根据你给出的比较函数进行快速排序,通过指针移动实现排序,排序之后的结果仍然放在原数组中,使用qsort函数必须自己写一个比较函数。

void (void *base, size_t nitems, size_t size, int (*compar)(const void , const void))

常见的qsort写法:void qsort(s, n, sizeof(s[0]), cmp);

第一个参数是参与排序的数组名(也就是开始排序的地址,所以&s[i],也是可以的)。

第二个参数是参与排序的元素的个数。

第三个参数是单个元素的大小(sizeof(s[0])这样就是获取到s[0]的元素大小)。

第四个参数是一个函数,定义qsort排序排序规则的函数。

比较函数

cmp比较函数(qsort它的比较函数名取什么都可以,cmp只是我看大家都这么写,习惯了!)

比较函数cmp的定义: int cmp(const void *a, const void *b);

返回值必须是int,两个参数的类型也必须是const void *。(变量名随意)

如果a与b的位置需要互换,则需要返回正值;若不需要互换,则返回非正值即可。(也就是正值是互换,非正值维持原状)

若是对int排序,升序,如果a比b大返回一个正值,小则返回负值,相等返回0。(*(int*)a - *(int*)b返回值)

函数体内要对a,b进行强制类型转化后才能得到正确的值。((int*))

  qsort包含在 头文件中,根据你给出的比较函数进行快速排序,通过指针移动实现排序,排序之后的结果仍然放在原数组中,使用qsort函数必须自己写一个比较函数。 void (void *base, size_t nitems, size_t size, int (*compar)(const void , const void)) 常见的qsort写法:void qsort(s, n, sizeof(s[0]), cmp); 第一个参数是参与排序的数组名(也就是开始排序的地址,所以&s[i],也是可以的)。 第二个参数是参与排序的元素的个数。 第三个参数是单个元素的大小(sizeof(s[0])这样就是获取到s[0]的元素大小)。 第四个参数是一个函数,定义qsort排序排序规则的函数。 比较函数 cmp比较函数(qsort它的比较函数名取什么都可以,cmp只是我看大家都这么写,习惯了!) 比较函数cmp的定义: int cmp(const void *a, const void *b); 返回值必须是int,两个参数的类型也必须是const void *。(变量名随意) 如果a与b的位置需要互换,则需要返回正值;若不需要互换,则返回非正值即可。(也就是正值是互换,非正值维持原状) 若是对int排序,升序,如果a比b大返回一个正值,小则返回负值,相等返回0。(*(int*)a - *(int*)b返回值) 函数体内要对a,b进行强制类型转化后才能得到正确的值。((int*)) #include #include int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;//升序 // return *(int *)b - *(int *)a;//降序 } int main() { int n,s[10000]; scanf("%d", &n); for(int i=0;i
经验分享 程序员 微信小程序 职场和发展