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*))
#include<stdio.h> #include<stdlib.h> 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<n;i++) scanf("%d",&s[i]); qsort(s, n, sizeof(s[0]), cmp); for(int i=0;i<n;i++) printf("%d ",s[i]); return 0; }qsort包含在