栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言中的qsort函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言中的qsort函数

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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767233.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号