当前位置: 首页 > news >正文

c语言中“qsort函数”和“结构体成员访问变量”

qsort函数:

qsort是c语言中的库函数,这个函数是对数据进行排序(对任意)

冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据

排序算法

冒泡排序

插入

选择

快速

void qsort{

   void * base;   //base指向的排序数组的第一个元素的指针

   size_t num;     //base指向数组中元素的个数

   size_t size;     //base指向数组中一个元素的大小,单位是字节

   int (*cmp)(const void*,const void*);

};

排列浮点型数组字符串结构体:不同的是两个元素之间的比较方式不同

  两个字符串的比较大小不能使用> ,>=, <, <=, !=, ==,应该有strcmp

  strcmp函数不是比较字符串的长度,而是对应字符所占字节的大小。

//先测试qsort来排序整形

void test1(){

    int arr[] = {1 2 4 6 7 8 9 43 }

    int  sz=sizeof(arr) / sizeof(arr[0]);

    qsort (arr , sz , sizeof(arr[0]) , cmp_int);

    print_arr();

}

对函数返回值有要求,比较两个p1,p2的整型

int cmp_int(const void*p1,const void *p2){

return *(int*)p1 - *(int*)p2;      //直接比较两个整数的大小了

}

比较两个结构体:

张三      李四

20          35

185        170    是比较年龄还是身高呢?

qsort给了一个函数指针,来比较结构体。

//用test2来排序结构体数据

Struct Stu{

char name[20];    //名字是字符串

int age;                //字符串比较用strcmp函数

}

//按照名字来比较

p1强制类型转换,才可以用。需要包含头文件#include<string.h>

void  test2(){

    struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};

    int sz=sizeof(arr)/sizeof(arr[0]);

    qsort(arr , sz , sizeof(arr[0]) , com_stu_by_name);

}

int cmp_stu_by_name(const void *p1,const void *p2){

     return  strcmp(((struct stu*)p1->name,((struct stu*)p2)->name);

}

//按照年龄进行访问

void  test3(){

    struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};

    int sz=sizeof(arr)/sizeof(arr[0]);

    qsort(arr , sz , sizeof(arr[0]) , com_stu_by_age);

}

int cmp_stu_by_age(const void *p1,const void *p2){

     return  strcmp(((struct stu*)p1->age,((struct stu*)p2)->age);

}

结构体成员访问变量

struct Stu{

char name[20];

int age;

}

int main(){

struct Stu s={"zhangsan",20};

printf("%s %d\n",s.name,s.age);          

struct Stu *s=&s;                                        //  结构体成员访问操作符:

printf("%s %d\n",(*ps).name,(*ps).age);     // . :结构体变量 成员名

pritnf("%s %d\n",ps->name,ps->age);       //->: 结构体指针->成员名

return 0;

}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • QTPropertyBrowser属性表控件:新增自定义属性类型
  • 【专题】2024中国生物医药出海现状与趋势蓝皮书报告合集PDF分享(附原数据表)
  • 数据结构|二叉搜索树
  • 基于JAVA+SpringBoot+Vue的医院资源管理系统
  • JS领域的AI工程利器分享
  • 【CSS in Depth 2 精译_036】5.6 Grid 网格布局中与对齐相关的属性 + 5.7本章小结
  • BFS 解决多源最短路问题
  • 不同编程语言的互相调用
  • STL简介
  • 数据仓库:构建企业智能化决策的基石
  • LEAN 赋型唯一性(Unique Typing)之 Church-Rosser 定理 (Church-Rosser Theorem)及 赋型唯一性的证明
  • vscode 配置rust格式化的正确方法
  • 【Node.js】RabbitMQ 不同交换器类型的使用
  • Vite 中的环境变量使用详解
  • 重型工程车辆数据集
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • docker-consul
  • HTML中设置input等文本框为不可操作
  • JS 面试题总结
  • JS笔记四:作用域、变量(函数)提升
  • React系列之 Redux 架构模式
  • spark本地环境的搭建到运行第一个spark程序
  • SQLServer插入数据
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue:响应原理
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 日剧·日综资源集合(建议收藏)
  • 使用putty远程连接linux
  • 微信开源mars源码分析1—上层samples分析
  • 一、python与pycharm的安装
  • 中文输入法与React文本输入框的问题与解决方案
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #FPGA(基础知识)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #知识分享#笔记#学习方法
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Java入门)学生管理系统
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (论文阅读40-45)图像描述1
  • (转)3D模板阴影原理
  • (转)关于多人操作数据的处理策略
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .NET Core中如何集成RabbitMQ
  • .NET 解决重复提交问题
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET简谈设计模式之(单件模式)
  • .NET框架类在ASP.NET中的使用(2) ——QA