C语言 简单使用qsort 比较结构体字符串大小

1.先简单调用C语言封装好的冒泡排序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//qsort C语言封装好的冒泡排序 可比较任何类型
struct stu{char name[20];int age;
};
//用户自己写的函数。函数名字也作为函数指针使用。是qsort函数的第四个参数
// void *代表可以接受任意类型的地址 但由于不清楚所占字节 所以不能对void*进行解引用和加减整数操作
//指针类型决定解引用时所访问空间大小   也决定指针加减整数时移动多大内存
int Compare_st(const void *e1,const void *e2)
{return strcmp(((struct stu*)e1)->name,((struct stu*)e2)->name);//想要对什么数据进行比较 就强制转换为什么类型的指针
}
int main(){struct stu a [3]={{"zhangsan",20},{"lisi",10},{"wangwu",15}};int leng=sizeof(a)/sizeof(a[0]);qsort(a,leng,sizeof(a[0]),Compare_st);//第一个参数为需排序数组首元素 第二个参数为需排序数组长度 第三个参数为需排序数组一个元素的大小 第四个参数为想要如何排序的函数(用户自己写的)的指针for(int x=0;x<3;x++){printf("%s %d ",a[x].name,a[x].age);}return 0;
}

2.代码实现比较任意类型的冒泡排序(排序结构体字符串)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>struct stu{char name[20];int age;
};void swap(char*a,char* b,int awidth){int i=0;//一次比较按照字符对内容进行交换for(i=0;i<awidth;i++){char temp=*a;*a=*b;*b=temp;a++;b++;}}int Compare_st(const void *e1,const void *e2)
{return strcmp(((struct stu*)e1)->name,((struct stu*)e2)->name);//想要对什么数据进行比较 就强制转换为什么类型的指针
}//第一个参数为需排序数组首元素地址 第二个参数为需排序数组长度 第三个参数为需排序数组一个元素的大小
// 第四个参数为想要如何排序的函数(用户自己写的)的指针
void test_qsort(void *a,int leng,int awidth,int(* Compare)( void *e1, void *e2)){int i=0;int j=0;//普通冒泡排序双层循环for(i=0;i<leng-1;i++){//比较趟数for(j=0;j<leng-1-i;j++){//一趟比较次数if(Compare((char *)a+j*awidth,(char *)a+(j+1)*awidth)>0)//将数组内容传到用户写的函数里进行比较  >0升序排列//(char *)a+j*awidth和(char *)a+(j+1)*awidth两个参数 强制转换为(char*)//(char*)+1 跳过一个字节 +2跳过两个字节.... 比较容易操作任意类型//假如 数组现在是987654321    这两个参数就是9和8 下次循环就是8和7swap((char *)a+j*awidth,(char *)a+(j+1)*awidth,awidth);//交换内容}}
}int main(){struct stu a [3]={{"zhangsan",20},{"lisi",10},{"wangwu",15}};int leng=sizeof(a)/sizeof(a[0]);test_qsort(a,leng,sizeof(a[0]),Compare_st);//模拟C语言的任意冒泡排序//第一个参数为需排序数组首元素 第二个参数为需排序数组长度 //第三个参数为需排序数组一个元素的大小 第四个参数为想要如何排序的函数(用户自己写的)的指针for(int x=0;x<3;x++){printf("%s %d ",a[x].name,a[x].age);}return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277697.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转载: iOS 优雅的处理网络数据

转载&#xff1a; iOS 优雅的处理网络数据 原文链接&#xff1a;https://juejin.cn/post/6952682593372340237 相信大家平时在用 App 的时候, 往往有过这样的体验&#xff0c;那就是加载网络数据等待的时间过于漫长&#xff0c;滚动浏览时伴随着卡顿&#xff0c;甚至在没有网…

使用C++11开发一个半同步半异步线程池

半同步半异步线程池介绍 在处理大量并发任务的时候&#xff0c;如果按照传统的方式&#xff0c;一个请求一个线程来处理请求任务&#xff0c;大量的线程创建和销毁将消耗过多的系统资源&#xff0c;还增加了线程上下文切换的开销&#xff0c;而通过线程池技术就可以很好的解决这…

Visual Studio编辑器中C4996 ‘scanf‘: This function or variable may be unsafe.问题解决方案

目录 ​编辑 题目&#xff1a;简单的ab 1. 题目描述 2. 输入格式 3. 输出格式 4. 样例输入 5. 样例输出 6. 解题思路 7. 代码示例 8. 报错解决 方案一 方案二 方案三 方案四 总结 题目&#xff1a;简单的ab 1. 题目描述 输入两个整数a和b&#xff0c;…

海思平台isp之raw图回灌调试

文章目录 一、搭建环境二、配置参数三、回灌raw图isp调试中,经常会遇到一些特定场景的效果需要优化,但由于某些原因和成本考虑,开发人员无法亲临现场,这个时候采集场景raw图回灌到板端调试,就显得尤为方便了。 一、搭建环境 (1)建立板端与PQTool连接 板端进入SS928V100…

深圳锐科达IP网络广播系统

深圳锐科达IP网络广播系统 网络音频广播系统是一种基于TCP/IP网络的纯数字音频广播系统。该网络音频广播系统在物理结构上与标准IP网络完全集成。它不仅真正实现了基于TCP/IP网络的数字音频的广播、直播和点播&#xff0c;而且利用TCP/IP网络的优势&#xff0c;突破了传统模拟广…

Ubuntu20.04 下编译安装 ffmpeg 和 ffplay

Ubuntu20.04 下编译安装 ffmpeg 和 ffplay 一、下载源码包二、安装依赖库三、编译四、添加环境变量五、验证是否成功六、问题 一、下载源码包 1.1 官方下载链接&#xff1a;http://ffmpeg.org/download.html 最新版本为6.1&#xff0c;点击 Download Source Code下载即可 &…

AWTK 串口屏开发(2) - 数据绑定高级用法

AWTK 串口屏 智能家居示例 1. 功能 这个例子稍微复杂一点&#xff0c;界面这里直接使用了 立功科技 ZDP1440 HMI 显示驱动芯片 例子中的 UI 文件和资源&#xff0c;重点关注数据绑定。在这里例子中&#xff0c;模型&#xff08;也就是数据&#xff09;里包括一台空调和一台咖…

RF模块是如何工作的?

射频&#xff08;RF&#xff09;模块使用无线电频率工作&#xff0c;这个频率范围在30kHz到300kHz之间变化。 在这个射频系统中&#xff0c;数字数据被表示为载波波幅度的变化。这种调制类型是振幅移位键。 这个射频模块是射频发射器和接收器的组合&#xff0c;发射器接收器对的…

安装ubuntu虚拟机并连接xShell+安装MySQL

网盘地址 链接&#xff1a;https://pan.baidu.com/s/1r-Je09AJrZcmbPYnCI6rfA?pwdk22h 提取码&#xff1a;k22h 安装 打开Vmware 一直下一步就行了 xshell连接 打开虚拟机&#xff0c;右键进入Terminal终端&#xff0c; 只复制opubuntu:~$后面的语句&#xff0c;前面op代…

如何使用蜘蛛池蚂蚁SEO

​蜘蛛池是一种利用搜索引擎爬虫进行推广营销的方式。它的核心是建立一个能够吸引搜索引擎爬虫的网站群&#xff0c;这些网站能够产生大量的优质内容&#xff0c;并形成一个巨大的网站群&#xff0c;从而吸引更多的搜索引擎爬虫。 如何联系蚂蚁seo&#xff1f; baidu搜索&…

算法基础概念之数据结构

邻接表 每个点作为头节点接一条链表 链表中元素均为该头节点指向的点 优先队列 参数: ①储存元素类型 ②底层使用的存储结构(一般为vector) ③比较方式(默认小于)

spring-cloud-stream-kafka生产速度慢

包版本spring-cloud-starter-stream-kafka:3.1.0 修改yaml配置 添加poller配置