C语言中排序函数的用法

2023-11-12

C语言中没有预置的sort函数。如果在C语言中,遇到有调用sort函数,就是自定义的一个函数,功能一般用于排序。
一、可以编写自己的sort函数。
如下函数为将整型数组从小到大排序。
void sort(int *a, int l)//a为数组地址,l为数组长度。
{
    int i, j;
    int v;
    //排序主体
    for(i = 0; i < l - 1; i ++)
        for(j = i+1; j < l; j ++)
        {
            if(a[i] > a[j])//如前面的比后面的大,则交换。
            {
                v = a[i];
                a[i] = a[j];
                a[j] = v;
            }
        }
}
对于这样的自定义sort函数,可以按照定义的规范来调用。

二、C语言有自有的qsort函数。
功 能: 使用快速排序例程进行排序
头文件:stdlib.h
原型: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数:
1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
这个函数必须要自己写比较函数,即使要排序的元素是int,float一类的C语言基础类型。
以下是qsort的一个例子:
#include<stdio.h>
#include<stdlib.h>
int comp(const void*a,const void*b)//用来做比较的函数。
{
    return *(int*)a-*(int*)b;
}
int main()
{
    int a[10] = {2,4,1,5,5,3,7,4,1,5};//乱序的数组。
    int i;
    qsort(a,n,sizeof(int),comp);//调用qsort排序
    for(i=0;i<10;i++)//输出排序后的数组
    {
        printf("%d\t",array[i]);
    }
    return 0;
}


---- - - - -  -  -   -    -    - 分割线   ——————————————————————————————————

在c++中qsort()排序函数的使用qsort函数应用大全 
七种qsort排序方法  
<本文中排序都是采用的从小到大排序>  
一、对int类型数组排序  
int num[100];  
Sample:  
int cmp ( const void *a , const void *b )  
{  
return *(int *)a - *(int *)b;  
}  
qsort(num,100,sizeof(num[0]),cmp);  
二、对char类型数组排序(同int类型)  
char word[100];  
Sample:  
int cmp( const void *a , const void *b )  
{  
return *(char *)a - *(int *)b;  
}  
qsort(word,100,sizeof(word[0]),cmp);  
三、对double类型数组排序(特别要注意)  
double in[100];  
int cmp( const void *a , const void *b )  
{  
return *(double *)a > *(double *)b ? 1 : -1;  
}  
qsort(in,100,sizeof(in[0]),cmp);  
四、对结构体一级排序  
struct In  
{  
double data;  
int other;  
}s[100]  
//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写  
int cmp( const void *a ,const void *B)  
{  
return (*(In *)a)->data > (*(In *)B)->data ? 1 : -1;  
}  
qsort(s,100,sizeof(s[0]),cmp);  
五、对结构体二级排序  
struct In  
{  
int x;  
int y;  
}s[100];  
//按照x从小到大排序,当x相等时按照y从大到小排序  
int cmp( const void *a , const void *b )  
{  
struct In *c = (In *)a;  
struct In *d = (In *)b;  
if(c->x != d->x) return c->x - d->x;  
else return d->y - c->y;  
}  
qsort(s,100,sizeof(s[0]),cmp);  
六、对字符串进行排序  
struct In  
{  
int data;  
char str[100];  
}s[100];  
//按照结构体中字符串str的字典顺序排序  
int cmp ( const void *a , const void *b )  
{  
return strcmp( (*(In *)a)->str , (*(In *)B)->str );  
}  
qsort(s,100,sizeof(s[0]),cmp);  
七、计算几何中求凸包的cmp  
int cmp(const void *a,const void *B) //重点cmp函数,把除了1点外的所有点,旋转角度排序  
{  
struct point *c=(point *)a;  
struct point *d=(point *)b;  
if( calc(*c,*d,p[1]) < 0) return 1;  
else if( !calc(*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;  
}  
:  
c++中加载头文件 "iostream" 
c中qsort函数包含在<stdlib.h>的头文件里,strcmp包含在<string.h>的头文件里


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

C语言中排序函数的用法 的相关文章

  • 怎么样对阿里云ECS主机进行绑定域名

    首先我有个阿里的 域名 虚拟云主机 搭建了一个wordpress 的网站 地址为 www liuxun name wordpress liuxun name wordpress 现在我想把一个阿里云的ECS主机 里面装了tomcat 希望以
  • GET请求里的body问题

    故事还得从一个bug说起 今天有人问我 为什么发到后端的请求400了 我说肯定是参数不对 你去检查检查GET POST之类的方法写没写对 要么就是字段没对上 无非是这几个问题 然后他说检查过了 没问题啊 我不太相信 但是看了看前端发送的请求
  • springmvc 03(JSR303和拦截器)

    目录 一 JSR303 1 服务端验证 2 步骤 二 拦截器 1 简介 2 拦截器与过滤器 2 1 什么是过滤器 2 2 拦截器和过滤器的区别 3 拦截器案例 3 1 使用原理 一 JSR303 1 服务端验证 2 步骤 1 导入pom x
  • 【数据结构】6.5 红黑树(C++)

    数据结构 6 5 红黑树 没有学过二叉搜索树 也叫二叉排序树或二叉查找树 的小伙伴们建议先学习一下 这样阅读会更轻松哦 点我学习二叉搜索树 目录 一 红黑树的概念和性质 二 红黑树的存储结构和声明 三 红黑树的构建过程 四 红黑树的实现 1
  • Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤

    1 从https github com BVLC caffe 通过git clone下载caffe源码 master分支 版本号为09868ac git clone https github com BVLC caffe git 2 先使用
  • Visio画出简单的拓扑图

    1 选择类别 类别 网络 基本网络图 2 画图 在左边选择 模具 上方选择 连接线
  • Ubuntu下编译并运行C++代码

    安装完Ubuntu后 用户目录有时候也叫 home 文件夹或者主文件夹 它的路径是 home username 其中 username 就是我们登录 Linux 时使用的用户名 Linux 会在 home 目录下为每一个登录的用户创建一个文
  • Java中泛型

    Thinking in Java 第15章笔记 即使使用了接口 就要求代码必须使用特定的接口 对程序的约束也还是太强了 我们希望达到的目的是编写更通用的代码 要使代码能够应用与 某种不具体的类型 而不是一个具体的接口或类 泛型这个术语的意思
  • 2023-05-30 题目

    一 LinkedList 1 特点 线程不安全 底层是链表 删除 插入数据快 查询速度较慢 如果想让其变成线程安全的 可以使用Collections synchronizedList 方法 链表底层结构 2 源码如下 Pointer to
  • 电磁兼容按GB4824-2019分类,为1组A类和2组A类,是如何区分?

    电磁兼容按GB4824 2019分类 为1组A类和2组A类 是如何区分 摘要 电磁兼容按GB4824 2019分类 为1组A类和2组A类 是如何区分 GB4824 2019分类 设备的分组与分类 分组 为了简化区分相关限值 本标准范围内的设
  • 请求分页系统中的置换算法(FIFO、LRU、Optimal)

    操作系统实验导航 实验一 银行家算法 https blog csdn net weixin 46291251 article details 115384510 实验二 多级队列调度和多级反馈队列调度算法 https blog csdn n
  • Spring Boot 使用WebSocket、SockJS、STOMP实现消息功能(三)

    一 介绍 这里主要基于上一篇介绍一下基于SocketJS Stomp来实现的的长连接 我借鉴了其他的一些博客 只是把我用的知识总结在了一起方便我自己以后回顾 二 WebSocket概念 概述 WebSocket协议提供了通过一个套接字实现全
  • 10年老技术人员:C++ 该如何快速入门?

    C 是一门面对对象的语言 我们如何学习呢 其实任何的难题都是多种简单的部分通过复杂的关系组合在一起 学语言 最关键的是理解而不是运用 高中的时候 老师给出的公式 都是告诉我们用就好了 不用去了解它怎么来的 但是语言不一样 你如果只会用那你是
  • UnityEditor-批处理Texture,spriteEditor,代码设置Pivot失效问题

    需求起因 最近制作角色2D八方向的动画 美术提供的序列帧图片资源 角色不同动作不同方向的图片大小和角色实际的中心点是不一致的 如图所示 攻击和溃败的序列帧图片尺寸和角色在图片中心位置是不一样的 这样会导致一个问题 在动画状态切换的时候 犹豫
  • R-CNN网络基础

    目录 R CNN网络基础 Overfeat模型 RCNN模型 算法流程 候选区域生成 CNN网络提取特征 目标分类 SVM 目标定位 预测过程 算法总结 Fast RCNN模型 算法流程 ROI Pooling 目标分类和回归 模型训练 模
  • java发送邮件报SSL安全异常解决

    用公司阿里云企业邮箱发送邮件 一直报javax net ssl SSLHandshakeException PKIX path building failed sun security provider 异常 顾名思义是安全验证问题 以下是
  • R语言-地图绘制的思路

    R中的画地图的思路有三种 一种是利用包里GIS方面的数据 在R中直接画出来 第二种是从其他地方拿到数据 在R中通过某些包解析后再展现成 第三种就是直接把别人的图拿过来 自己再添加或去掉自己需要或不需要的东西 这三种方法只是数据来源不同 具体
  • BGP实验--联邦以及反射器

    实验明细 实验拓扑 实验要求 实验内容 实验拓扑 实验要求 1 R2 R7每台路由器均存在一个环回接口用于建立邻居 同时还存在一个环回来代表连接用户的接口 最终这些连接用户的接口网络需要可以和R1 8的环回通讯 2 AS2网段地址为172
  • 【C语言】扫雷小游戏的实现(爆炸展开)

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 各位朋友们大家好呀 今天又又是游戏整活环节 先介绍一下这个版本的
  • 【JavaScript】运算符及其优先级

    目录 一 算术运算符 1 常用的算术运算符 2 算术运算符的注意事项 二 递增和递减运算符 1 前置递增 递减 运算符 2 后置递增 递减 运算符 3 前缀和后缀的区别 三 比较运算符 关系运算符 四 逻辑运算符 1 运算中的短路现象 2

随机推荐

  • MATLAB车牌识别技术实现

    目 录 一 课程设计任务11 二 课程设计原理及设计方案22 1 系统简述22 2 图像预处理33 2 1灰度变换33 2 2边缘提取44 3 车牌定位55 4 字符分割55 5 字符识别66 三 课程设计的步骤和结果88 四 设计总结22
  • 关于深度学习中concat和eltwise两种特征融合方式用处的猜想

    在对网络不同地方的特征进行融合时 尤其是在深层网络融合浅层网络的特征的时候我们需要用到这两种融合方式 这两者的使用有有什么区别吗 在实际中 直接使用eltwise将当前的深层特征与浅层的特征融合时效果并不好 应该在eltwise前加若干层网
  • jmeter基本使用

    1 测试工具 jmeter压力测试相关工具 1 apache jmeter 3 1 2 JMeterPlugins Standard 1 4 0 JMeterPlugins Extras 1 4 0 3 ServrerAgent 2 2 1
  • windows azure系统简介

    Windows Azure Storage 云存储系统 提供给用户 貌似无限容量的数据存储 貌似可保存任意长的时间 数据按副本存放 本地副本 容忍设备故障 广域副本 容忍地域灾难 强一致性 待看 Azure存储系统的元素包括三种 Blobs
  • 随机抽奖程序(每天一个python小项目)

    import random num 用于存放抽奖码 print 欢迎来到抽奖小程序 while True usernum input 请输入参与抽奖的人数 reward input 请输入中奖人数 if usernum isdigit Tr
  • Python+Selenium-20-图片验证码处理

    前言 有些注册页面会含有验证码 本篇描述在selenium中对验证码的处理实例 需求 打开万维易源注册页面 https www showapi com auth reg 这个是第三方api平台易源接口 后面验证码识别用的就是他的 在注册页面
  • 【HBZ分享】ES索引分片的写入原理 及 流程

    当一条数据写到ES要经历哪些过程 当插入一条新的数据时 数据会进入Translog 和 MemoryBuffer两个内存中 并添加了事务日志 此时该文档不可查询 当translog大到一定程度时 会发生一个commit操作 也就是全量提交
  • python数据清洗 —— re.split()划分字符串

    需求 对于一行字符串 route views6 routeviews org 141694 2a0c b641 24f fffe 7 184891 CN apnic OTAKUJAPAN AS Otaku Limited CN 要将其划分成
  • CMD 命令行实现 Windows 下复制文件到文件夹下的所有文件夹

    目录 前言 1 学习 xcopy 2 展示命令行 前言 提示 这里可以添加本文要记录的大概内容 整件事情真是花了我大半天的时间 几个小时啊 终于从错误中尝试出了正确的做法 赶紧分享一下 1 学习 xcopy Win R 调出运行 键入 cm
  • ElasticSearch简介

    ElasticSearch是Java开发并且是当前最流行的开源的企业级搜索引擎 能够达到近实时搜索 稳定可靠快速安装使用方便 客户端支持Java net各种编程语言 ElasticSearch通Lucene的比较 Lucene只能在Java
  • MAC安装LLVM指导

    首先克隆llvm github工程代码 下载有时出现中断失败 git clone https github com llvm llvm project git 安装依赖软件 安装 ninja 也可以通过编译方式安装 brew install
  • 微信公众号内下载pdf等文件,受微信所限制,安卓和IOS不同处理方式(最最最优版)

    继上一篇文章微信公众号内下载pdf等文件 受微信所限制 安卓和IOS不同处理方式 后觉得还有更好的解决办法 这次真的找到更加优化版本 一定需要后台配合才行 后台接口返回Blob 后端设置response setHeader Content
  • OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)

    文章目录 1 OPC基础知识 OPCDA OPCUA 1 1 OPC基础知识 1 2 OPC通信读写方式 2 OPC通信仿真 2 1 上位机与PLC通过ModbusTCP直接通信 2 2 OPC通信介绍及实例 2 2 1 OPC通信与Mod
  • TCP报文格式

    TCP报文格式 文章目录 TCP报文格式 TCP首部 三次握手 四次挥手 TCP首部 源端口和目的端口 各占16bit 序号 SEQ序号 给发送的每个数据包标上序号 确认号 ACK序号 是指即将接收的数据包序号 注意 这里指的是序号不是标志
  • Linux 之软中断softirq

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net huangweiqing80 article details 83274095 softirq驱动开发人员一般都不会用到 到内核代码中会用到soft
  • python requests get请求_Python接口自动化之requests请求封装

    今天距2021年253天 这是ITester软件测试小栈第114次推文 在上一篇Python接口自动化测试系列文章 Python接口自动化之Token详解及应用 介绍token基本概念 运行原理及在自动化中接口如何携带token进行访问 以
  • docker内存

    docker container 动态修改内存限制 docker update help docker update m 4096m memory swap 1 ubuntu test docker update m 4096m memor
  • FPGA中的output or inout port xxx must be connected to a structural net expression错误

    主模块的output不能加reg 只在子模块的output 加reg 关于子模块调用 有两种调用方式 第一种是位置对应 如 bcd accbcd in8 out71 ou72 out73 如上图所示 第二种是信号名对应方式 此时不必按顺序
  • 数据结构---栈&&队列

    目录 什么是数据结构 什么是算法 Algorithm 生活中的数据结构和算法 数组结构 栈结构 stack 栈结构的实现 十进制转二进制 队列结构 Queue 队列的应用 对列类的创建 击鼓传花面试题 优先级队列 优先级队列的实现 什么是数
  • C语言中排序函数的用法

    C语言中没有预置的sort函数 如果在C语言中 遇到有调用sort函数 就是自定义的一个函数 功能一般用于排序 一 可以编写自己的sort函数 如下函数为将整型数组从小到大排序 void sort int a int l a为数组地址 l为