1.头文件:qsort函数是在stdlib.h声明
2.函数原型:void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );
3.qsort函数的四个参数:
第一个参数:待排序的数组,排序后数据依然存放在它中
第二个参数:数组中待排序元素的数量
第三个参数:一个元素所占的空间大小(多少字节)
第四个元素:指向函数(自己定义的比较函数)的指针,用来确定排序的顺序
4.自定义比较函数(默认为升序排列,降序只需将return返回值反过来即可):
数组元素为int型:
int nums[10];
int cmp(void* _a ,void* _b)
{
int a =*(int*)_a; //强制类型转换
int b=*(int*)_b;
return a-b;
}
qsort(nums,10,sizeof(nums[0]),cmp); //因为元素为 int 型,所占空间也可以直接写 4
数组元素为char型:
和int型几乎无差别,改一下数据类型即可
数组元素为double型:
需要注意cmp函数返回值需要用三目运算符(如果很接近的两个数,直接作差结果很小会被判为0),例如:return a > b ? 1 : -1
数组元素为字符串类型:
也没什么需要注意的,有一点,返回值不能直接作差(字符串应用strcmp);
5.实例(Leetcode976题:
给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。
示例 1:
输入:nums = [2,1,2]
输出:5
示例 2:输入:nums = [1,2,1]
输出:0
提示:
3 <= nums.length <= 104
1 <= nums[i] <= 106来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-perimeter-triangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
ac代码:
int cmp(int *_a,int *_b)
{
int *a=_a;int *b=_b;
return *a-*b;
}
int largestPerimeter(int* nums, int numsSize){
qsort(nums,numsSize,sizeof(int),cmp);
for(int i=numsSize-1;i>=2;i--)
{
if(nums[i-2]+nums[i-1]>nums[i])
{
return nums[i-2]+nums[i-1]+nums[i];
}
}
return 0;
}



