sort()函数与qsort()函数及其头文件

2023-11-02

sort()函数是C++中的排序函数其头文件为:#include<algorithm>头文件;
qsort()是C中的排序函数,其头文件为:#include<stdlib.h>

先说一下qsort()吧,搜索到的资料容易懂一些。
六类qsort排序方法
qsort函数很好用,但有时不太会用比如按结构体一级排序、二级排序、字符串排序等。
函数原型:void qsort(void *base,size_t nelem,size_t width,int (*fcmp)(const void*,const void *))
输入参数:
base 待排序的数组,nelem 数组元数的个数(长度),width 每一个元素所占存储空间的大小,fcmp 用于对数组元素进行比较的函数的指针(该函数是要自己写的),返回值为1或-1(p1>p2则返回-1,p1<p2则返回1,p1==p2则返回0),size_t是int
输出参数:base 以升序排列 
以下是其具体分类及用法(若无具体说明是以降序排列):
1、对一维数组排序:
(Element_type 是一位数组中存放的数据类型,可以是char,int,float,double,ect)
int comp(const void *p1,const void *p2)
{
        return  *((Element_type*)p2)>*((Element_type*)p1)?1:-1;
}
int main()
{
        Element_type list[MAX];
        initial(list);//这是对数组list[max]初始化
        qsort(list, sizeof(list),sizeof(Element_type),Comp);//调用函数qsort
        return 0;
}
2、对字符串排序:
int Comp(const void *p1,const void *p2)
{
        return strcmp((char *)p2,(char *)p1);
}
int main()
{
        char a[MAX1][MAX2];
        initial(a);
        qsort(a,lenth,sizeof(a[0]),Comp);
        //lenth 为数组a的长度
3、按结构体中某个关键字排序(对结构体一级排序):
struct Node
{
        double data;
        int other;
}s[100];
int Comp(const void *p1,const void *p2)
{
        return (*(Node *)p2)->data > (*(Node *)p1)->data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),Comp);
4、按结构体中多个关键字排序(对结构体多级排序)[以二级为例]:
struct Node
{
        int x;
        int y;
}s[100];
//按照x从小到大排序,当x相等时按y从大到小排序(这是3跟4的区别)
int Comp(const void *p1,const void *p2)
{
        struct Node *c=(Node *)p1;
        struct Node *d=(Node *)p2;
        if(c->x!=d->x)
                return c->x-d->x;
        else
                return d->y - c->y;
}
5、对结构体中字符串进行排序:
struct Node
{
        int data;
        char str[100];
}s[100];
//按照结构体中字符串 str 的字典序排序
int Comp(const void *p1,const void *p2)
{
        return strcmp((*(Node *)p1).str,(*(Node *)p2).str);
}
qsort(s,100,sizeof(s[0],Comp);
6、计算几何中求凸包的Comp
int Comp(const void *p1,const void *p2)//重点Comp函数,把除了1点外的所有的点旋转角度排序
{
        struct point *c=(point *)p1;
        struct point *d=(point *)p2;
        if( cacl(*c, *d,p[1])<0)
                return 1;
        else if(!cacl(*c, *d, p[1]) && dis(c->x,c->y,p[1].x,p[1].y)<dis(d->x,d->y,p[1].x,p[1].y ) )
        //如果在一条直线上,则把远的放在前面
                return 1;
        else
                return -1;
}

sort()函数说起来有一点模糊(没有比较系统的总结)
函数Sort()用于对参数整数数组array的元素进行由小到大的选择排序,其中参数n表示array数组中存储的数组元素数。例如,假设数组array中有10个元素,选择排序就是:先将10个数中的最小数与a[0]对换;再将a[1]到a[9]中的最小数与a[1]对换,….,直到排序完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sort()函数与qsort()函数及其头文件 的相关文章

随机推荐

  • Atlas200

    Atlas200 https bbs huaweicloud com forum thread 22913 1 1 html https ascend huawei com documentation details zh v1 1 1 1
  • 在Vue中实现全屏背景图片

    background url xx images 图片名字 jpg 这里的地址是用你项目中图片所在的路径为准 background repeat no repeat 将图片样式不重复 background size 100 100 设置图片
  • Unity简易实现角色脚下光圈

    方案一 使用Projector投影 最终效果 准备工作 1 一张背景为透明的圆圈图案 我这里是从阿里巴巴矢量网搜索圆圈下载到的 2 Standard Assets资源包 去AssetStore下载通用资源包 需要用到里面的light sha
  • 分治策略时间复杂度分析(一)-用代入法求解递归式

    分治策略时间复杂度分析 一 用代入法求解递归式 分治策略是算法中的一种重要的思想 比如归并排序就是用到了分治的策略 在分治策略中我们递归地求解一个问题 在每一层递归中都应用三个步骤 1 分解 2 解决 3 合并 文章目录 分治策略时间复杂度
  • Qt Creator创建项目后报错‘./ui_xx.h‘ file not found

    错误提示如图 错误原因 创建项目时勾选了形成xx ui文件 此ui文件在构建项目后产生 故在没有构建项目前报错属于正常 解决办法 构建项目后关闭再重新打开文件 提示即消失
  • 2023年江西省赣州市技能大赛 网络安全竞赛试题任务书

    2023年江西省赣州市技能大赛 网络安全竞赛试题任务书 A模块基础设施设置 安全加固 200分 A 1任务一 登录安全加固 A 2任务二 本地安全策略设置 A 3任务三 流量完整性保护 A 4任务四 事件监控 A 5任务五 服务加固 B模块
  • Vmware16 下载与安装

    Vmware16 下载与安装 vmware16 密钥 ZF3R0 FHED2 M80TY 8QYGC NPKYF YF390 0HF8P M81RQ 2DXQE M2UT6 ZF71R DMX85 08DQY 8YMNC PPHV8 Vmw
  • tshark解析本地pcap数据包提取五元组{src_ip,src_port,proto,dst_ip,dst_port}与时间戳,包长

    tshark官方文档 https www wireshark org docs man pages tshark html wireshark官方特征参考 https www wireshark org docs dfref 前提需要安装w
  • 利用递归求斐波那契数列

    斐波那契额是二级递推数列 从第三项起 每项为前两项的和 利用函数的递归可以很好实现 只需每次返回n 1 和 n 2 即可 上代码 define CRT SECURE NO WARNINGS 1 include
  • C#使用多线程并发之异步委托

    阻塞式编程 我们一边编写的代码都是同步代码 也就是从上到下按照顺序执行 例如 public delegate void DoWorkHandler class Program static void Main string args Con
  • vsflexgrid单元格换行后自动使用行高_大咖分享办公秘籍:Word和Excel换行

    我们在日常办公和学习中 对文档进行整理和粘贴数据的过程中 经常会用到的就是换行功能了 那么怎么实现自动换行呢 下面 就由非凡学院商务办公培训专业的付老师 和大家分享一下在Word和Excel中简单的实现过程 赶紧来看看和学习一下吧 1 硬回
  • 虚拟机网络配置、防火墙、克隆

    一 修改虚拟机的网络配置 在虚拟机开启的情况下配置 选中虚拟机hadoop100 编辑 虚拟网络编辑器 更改设置 NAT模式 NAT设置 网关改为192 168 1 2 连点两次确定 二 修改windows的网络配置 1 点击电脑右下角的网
  • 华为OD机试 - 靠谱的车 - 逻辑分析(Java 2023 B卷 100分)

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 专栏导读 本专栏收录于 华为OD机试 JAVA
  • DBeaver报Public Key Retrieval is not allowed 错误

    解决方法 1 选择报错的链接 按F4 出现编辑链接弹窗 切换到驱动属性标签页 2 修改allowPublicKeyRetrieval属性的值为TRUE 3 重启DBeaber
  • Git+TortoiseGit详细安装教程(HTTP方式)

    Git是核心 TortoiseGit是个外壳 git需要使用命令行 可以简单理解为TortoiseGit是git的GUI展现形式 使用TortoiseGit操作 就不用记住git命令了 Git可以使用HTTP和SSH方式 HTTP方式配置更
  • 素数筛

    素数又称质数 是指除了1和它本身 再也没有其他的因子 合数是除了1和它本身以外 还有其他的因子 1既不是素数也不是合数 此题为洛谷上的一道题 以此题为例题 讲解素数筛 埃氏筛法 时间复杂度O nlogn 得分 80 include
  • html比较字符数字大小,JavaScript怎么比较字符串?

    javascript怎么比较字符串 下面本篇文章就来给大家介绍使用javascript比较字符串的几种方法 希望对大家有所帮助 一 大于 gt 小于 javascript字符串在进行大于 小于 比较时 会根据第一个不同的字符的ascii值码
  • 预训练模型、迁移学习

    预训练模型把迁移学习很好地用起来了 让我们感到眼前一亮 这和小孩子读书一样 一开始语文 数学 化学都学 读书 网上游戏等 在脑子里积攒了很多 当他学习计算机时 实际上把他以前学到的所有知识都带进去了 如果他以前没上过中学 没上过小学 突然学
  • linux 查看文件个数

    要查看 Linux 系统中某个目录下的文件数量 可以使用 ls 命令结合管道和 wc 命令来完成 具体来说 可以使用 ls 命令的 l 参数来列出目录中的文件和子目录的详细信息 然后将输出结果通过管道 传递给 wc 命令 使用 l 参数来统
  • sort()函数与qsort()函数及其头文件

    sort 函数是C 中的排序函数其头文件为 include