用冒泡排序的思想,模拟实现qsort函数

首先,要理解什么是冒泡排序,冒泡排序首先就是把无序的一组数,转化成为有序的,像冒泡一样,把排序好的数,一点点的冒出来,比如如下代码

void buffle_sort(int* arr,int sz){//i代表了需要冒泡排序的趟数for(int i=0;i<sz-1;i++){//j代表了需要比较的两两元素//从小到大的顺序for(int j=0;j<sz-1-i;j++){if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}
}
int main(){int arr[]={2,3,5,6,8,9,0,4,1,7};int sz=sizeof(arr)/sizeof(arr[0]);bubble_sort(arr,sz);
}

冒泡排序有点局限性,在这里只能排序整形的数组,那如果我想使用结构体排序呢,或者我使用float类型进行排序呢,这里的冒泡排序就要重写。
为了更加的方便,使用库函数qsort进行排序

//void qsort (void* base, 这里是函数的首地址
//			   size_t num, 表示的是需要排序的个数
//			   size_t size,表示的需要排序的元素的字节数
//            int (*compar)(const void*,const void*));
//                      表示两个元素需要怎么去比较

下面对qsort进行使用

#include<stdlib.h>
struct stu{char name[20],int age;
}
int cmp_int(const void* e1,const void* e2){//从小到大的顺序排序//此时如果需要从大到小,把e1和e2的变换一下就行return *(int*)e1-*(int*)e2;
}
int cmp_by_name(const void* e1,const void* e2){return strcmp(((struct stu*)e1)->name,((struct stu*)e2)->name);
}
int cmp_by_age(const void* e1,const void* e2){return ((struct stu*)e1)->age-((struct stu*)->age);
}
void test1(){int arr[]={2,3,5,6,8,9,0,4,1,7};int sz=sizeof(arr)/sizeof(arr[0]);qsort(arr,sz,sizeof(arr),cmp_int)
}
void test2(){struct stu s[3]={{"zhangsan",30},{"lisi",15},{"wangwu",50}};int sz=sizeof(s)/sizeof(s[0]);//qsort(s,sz,sizeof(s[0]),cmp_by_name);qsort(s,sz,sizeof(s[0],cmp_by_age);
}
int main(){test1();test2();
}

由于冒泡排序使用的话要规定类型,所以使用冒泡排序的思想,模拟实现qsort函数,但是我们要知道,qsort的底层逻辑是用快速排序实现的。
下面看这一段代码

struct stu{char name[20];int age;
};
int cmp_by_name(const void* e1,const void* e2){return strcmp(((struct stu*)e1)->name,((struct stu*)e2)->name);
}
void swap(char* buf1,char* buf2,int width){for(int i=0;i<width;i++){char temp=*buf1;*buf1=*buf2;*buf2=temp;buf1++;buf2++;}
}
void bubble_sort2(void* base,int sz,int width,int(*cmp)(const void* e1,const void*e2)){for(int i=0;i<sz-1;i++){for(int j=0;j<sz-1-i;j++){if(cmp((char*)base+j*width,(char*)base+(j+1)*width)>0){swap((char*)base+j*width,(char*)base+(j+1)*width,width);}}}
}
void test(){struct stu s[3]={{"zhangsan",50},{"wangwu",20},{"lisi",30}};int sz=sizeof(s)/sizeof(s[0]);bubble_sort2(s,sz,sizeof(s[0]),cmp_by_name);}
int main(){test();return 0;
}

这是代码的实现,看到这别忘了点个赞哦;

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

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

相关文章

关于机器学习,你需要知道的三件事!

摘要&#xff1a; MATLAB开发运营团队深度解析何为机器学习&#xff0c;什么时候使用机器学习&#xff0c;如何选择机器学习算法&#xff0c;MATLAB到底能为机器学习提供怎样的便利&#xff1f;机器学习是一种数据分析技术&#xff0c;让计算机执行人和动物与生俱来的活动&…

京东云的区块链“经”

戳蓝字“CSDN云计算”关注我们哦&#xff01;就在不久前&#xff0c;京东云在北京国家会议中心召开“区块链京东云 大有可为”战略合作媒体沟通会。会上&#xff0c;京东云与京东数科宣布了在区块链技术服务领域深度合作&#xff0c;重磅发布了智臻链“云”建设规划&#xff0c…

MaxCompute Tunnel SDK数据上传利器——BufferedWriter使用指南

摘要&#xff1a; MaxCompute 的数据上传接口&#xff08;Tunnel&#xff09;定义了数据 block 的概念&#xff1a;一个 block 对应一个 http request&#xff0c;多个 block 的上传可以并发而且是原子的&#xff0c;一次同步请求要么成功要么失败&#xff0c;不会污染其他的 b…

cnpm不是内部或外部命令 cnpm: command not found 解决方案 cnpm

问题是处在于 你没用用淘宝的镜像 安装cnpm npm install cnpm -g --registryhttps://registry.npm.taobao.org验证 cnpm -v

库函数strlen的模拟实现

1、对于strlen这个库函数来说&#xff0c;主要就是求字符串的长度的&#xff0c;无论何时&#xff0c;只要遇到‘\0’,求得的长度都会戛然而止&#xff0c;可以看一下例子 #include<stdio.h> #include<string.h> int main(){char* str1[]"abcdef";char*…

MaxCompute 中的Code Generation技术简介

摘要&#xff1a; 前言 在《数据库系统中的Code Generation技术介绍》中&#xff0c;我们简单介绍了一下Code Generation技术及其在大规模OLAP系统&#xff0c;特别是大规模分布式OLAP系统中的重要性。MaxCompute采用了Code Generation技术来提高计算效率。在MaxCompute 前言 …

java调用python_Python教程:17个冷门但实用的小技巧

Python是机器学习的主流语言&#xff0c;没有之一。今年5月&#xff0c;它首次在PYPL排行榜上超越JAVA&#xff0c;成为全球第一大编程语言。而一个月后&#xff0c;Stack Overflow也分享了最新的编程语言浏览量统计数字&#xff0c;结果显示&#xff0c;Python的月活历史性地超…

Hadoop精华问答 | NameNode的工作特点

我们很荣幸能够见证Hadoop十年从无到有&#xff0c;再到称王。感动于技术的日新月异时&#xff0c;让我们再来看看关于Hadoop的精华问答。1Q&#xff1a;NameNode的工作特点A&#xff1a;NameNode始终在内存中保存metedata&#xff0c;用于处理“读请求”&#xff0c;到有“写请…

五个非常实用的自然语言处理资源

摘要&#xff1a; 正在学习NLP&#xff0c;手中没有资源&#xff1f;快来看看这些免费的NLP学习资源吧&#xff01;如果你对自然语言处理方面的资源感兴趣&#xff0c;请仔细阅读本篇文章。运行数据科学POC的7个步骤网上有很多依靠深度学习方法的NLP资源&#xff0c;有一些资源…

'umi' 不是内部或外部命令,也不是可运行的程序 或批处理文件或umi: command not found

1.#首先&#xff0c;需要安装Node.js &#xff08;一路下一步安装&#xff09;&#xff0c;并确保 node 版本是 8.10 或以上。&#xff08;mac 下推荐使用 nvm 来管理 node 版本&#xff09; #安装完成后&#xff0c;通过node -v 命令查看其版本号 node -v2.推荐使用 yarn 管…

库函数strcpy函数的实现

strcpy指的是字符串的拷贝&#xff0c;就是把源字符串拷贝到目标空间里面 1、源字符串的拷贝是是以‘\0’结尾的&#xff0c;同时会将字符串中的’\0’拷贝过去 #include<stdio.h> int main(){char arr1[20]"xxxxxxxxxxxxx";char arr2"hello world"…

机器学习和人工智能的初学指南

摘要&#xff1a; 作者自学机器学习和人工智能&#xff0c;站在一个初学者的角度来回顾这些经历并编写这篇适合初学者的指南。我自学过一年机器学习和人工智能&#xff0c;我认为初学者在该领域还没有一个学习的途径&#xff0c;这是我创建这个指南的目的。在过去的几个月里&am…

idle显示出错信息 python_原来学Python最好的书是这一本?它在bookauthority里排名第三...

有一本学Python的书&#xff0c;也许你还没有关注到&#xff0c;它在bookauthority的Python类目中排名第三&#xff0c;要胜过太多太多的Python书。那就是《Python编程快速上手 让繁琐工作自动化》。就它本身来说&#xff0c;这本书不会让你变成一个职业软件开发者&#xff0c;…

CSDN推荐博客

CSDN推荐博客&#xff1a; 小学生05101https://blog.csdn.net/liuwenjun05101大神&#xff0c;快来碗里https://blog.csdn.net/cowbin2012/article/list热水钟https://blog.csdn.net/zhongzk69_江南一点雨https://blog.csdn.net/u012702547方志朋https://blog.csdn.net/forezp…

“根本就不需要 Kafka 这样的大型分布式系统!”

由 Scala 和 Java 编写的 Kafka 是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据&#xff0c;不过&#xff0c;Kafka 也存在数据并非真正的实时传输、不支持物联网传感数据直接接入、监控不完善等缺点。事实上&#xff0c;作为开…

一份关于机器学习中线性代数学习资源的汇总

摘要&#xff1a; 本文是一份关于机器学习中线性代数学习指南&#xff0c;所给出的资源涵盖维基百科网页、教材、视频等&#xff0c;机器学习从业者可以从中选择合适的资源进行学习。对于机器学习而言&#xff0c;要学习的特征大多数是以矩阵的形式表示。线性代数是一门关于矩阵…

库函数strcat的实现

strcat是字符串追加的函数&#xff0c;字符串的追加是发现目标空间的‘\0’结束 模拟实现strcat函数 char* my_strcat(char* dest, const char* src) {assert(dest);assert(src);char* cur dest;//1、找到目标空间的\0while (*cur) {cur;}//2、完成字符串的拷贝while (*cur …

Linux环境_源码安装Unoconv实现文件在线预览doc,doxc,xls,xlsx,ppt,pptx 文件

因业务需求需要&#xff0c;用unoconv就可以轻松地实现利用LibOffice可以打开的文档的转换。 服务器版本 环境系统版本LinuxRed Hat Enterprise Linux Server release 7.6 (Maipo)LinuxCentOS Linux release 7.6 需要准备软件包 软件及版本下载链接LibreOffice_6.3.2_Linux_x…

车纷享:基于阿里云HBase构建车联网平台实践

摘要&#xff1a; 1. 业务介绍 车纷享是国内首家进行汽车共享开发和运营的公司。旗下共享汽车平台采用新能源汽车作为运营工具以B2CC2C汽车共享作为商业运营模式采用车联网技术作为运营管理技术目前已与国内多个城市建立合作。 1. 业务介绍 车纷享是国内首家进行汽车共享开发和…

promise用法_图解 Promise 实现原理(四):Promise 静态方法实现

作者&#xff1a;Morrain转发链接&#xff1a;https://mp.weixin.qq.com/s/Lp_5BXdpm7G29Z7zT_S-bQ前言Promise 是异步编程的一种解决方案&#xff0c;它由社区最早提出和实现&#xff0c;ES6 将其写进了语言标准&#xff0c;统一了用法&#xff0c;原生提供了Promise对象。更多…