一、qsort函数
void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*))
base 数组名
num 元素个数(从前往后计算)
size 数组元素所占字节( sizeof(type) )
*compar 排序原则(想怎么排:递增,递减,奇偶等)
//实例
int arr[5] = {5,6,2,1,3,4}
qsort(arr, 6, sizeof(int), cmp);
二、compar函数
int (*compar)(const void*p1,const void*p2)
compar函数的参数需要以const void *p1,const void *p2的形式来定义,并且手动强制转换类型
关于compar的return:
返回值小于0,p1指向的元素会被排到p2指向的元素的左边;
返回值等于0,p1指向的元素与p2指向的元素排序是未知的;
返回值大于0,p1指向的元素会被排到p2指向的元素的右边;
三、排序原则
1)递增排序
int cmp(const void* p1,const vodi* p2){
int a1 = *(int*) p1;//把p1强行转换成数组(int)元素的指针类型,解引用指针变量p1取数组元素数据
int a2 = *(int*) p2;
if(a1 < a2){
return -1;
}
else if(a1 > a2){
return 1;
}
return 0;
}
如果确保数组的数据相减不会超过32位整型,可以简写
int cmp(const void* p1,const vodi* p2){
return (*(int*) p1) - (*(int*) p2);
}
2)递增排序
int cmp(const void* p1,const vodi* p2){
int a1 = *(int*) p1;
int a2 = *(int*) p2;
if(a1 > a2){
return -1;
}
else if(a1 < a2){
return 1;
}
return 0;
}
简化
int cmp(const void* p1,const vodi* p2){
return (*(int*) p2) - (*(int*) p1);
}
3)偶数在前奇数在后
int Qua(int x){
return x%2 ;
}
int cmp(const void* p1,const vodi* p2){
return Qua(*(int*) p1) - Qua(*(int*) p2);
}