如何用C++写七大经典排序代码?操作步骤-环球快资讯
【资料图】
(冒泡,选择,插入,希尔,快速,归并,堆排)周末加班学习C++,打算用C++写七大经典排序代码。之前写好的C实现代码debug后运行良好。之前的mysortlib.h中函数声明如下,接口完全是一样的。
void _bubsort(int arr[], int len);void _bubsort_(int arr[], int len);void _isort(int arr[], int len);void _isort_(int arr[], int len);void _ssort(int arr[], int len);void _ssort_(int arr[], int len);void _selsort(int arr[], int len);void _msort(int arr[], int len);void _qsort_easy(int arr[], int len);void _qsort(int arr[], int len);void _hsort(int arr[], int len);
我因此设计的C++接口是void sort_func(vector&arr, int len);考虑到:这样调用也合理void sort_func(vector&arr);先试试用默认参数形式void sort_func(vector&arr, int len=arr.size());错误提示:arr not in the context。那么就用函数重载,函数名一样,参数不同,每一个都定义两个。于是想要换个方法。想到宏。测试是成功的,可是可读性有一定损失。首先,建立一个测试文件测试可行性。
内容如下
#include#include#include/* 宏定义适配器(仅声明) */#define MACRO_VECTOR_INT_DECLARE(func_name_in_macro) void func_name_in_macro(std::vector&arr, int len)/* 宏定义适配器(仅声明) */#define MACRO_VECTOR_DECLARE(func_name_in_macro) void func_name_in_macro(std::vector&arr)/* 宏定义适配器 */#define MACRO_VECTOR_IMPLEMENT(func_name_in_macro) MACRO_VECTOR_DECLARE(func_name_in_macro){func_name_in_macro(arr, arr.size());}using namespace std;/* 一开始想用这种方式实现批量声明,定义函数,失败。 * arr not in the context !void _bubsort(vector&arr, int len=arr.size()){ arr[0] = len; cout << len << endl;} */MACRO_VECTOR_INT_DECLARE(_bubsort); // 声明函数 _bubsort(std::vector&arr, int len);MACRO_VECTOR_INT_DECLARE(_bubsort){ // 函数定义 cout << "this function was created by macro with an argument funciton name! and this function use an argument len:" << len << endl;}MACRO_VECTOR_DECLARE(_bubsort); // 补充一个适配器 _bubsort(std::vector&arr);MACRO_VECTOR_IMPLEMENT(_bubsort) // 补充一个适配器 _bubsort(std::vector&arr){ _bubsort(arr, arr.size()); }#define sortfunc _bubsortint print_int(int n){ cout << n << " " ; }int main(int argc, char* argv[]){ vectorarr(10); srand(time(0)); generate(arr.begin(), arr.end(), rand); for_each(arr.begin(), arr.end(), print_int); cout << endl; sortfunc(arr, 10); cout << "that is diff call" << endl; sortfunc(arr); return 0;}
编译,运行,调试,最后成功。说明是可行的。然后实际运用,将代码分拆到几个文件声明变成如下
#ifndef _MYSORTLIB_H#define _MYSORTLIB_H/* 宏定义适配器(仅声明) */#define MACRO_VECTOR_INT_DECLARE(func_name_in_macro) void func_name_in_macro(std::vector&arr, int len)/* 宏定义适配器(仅声明) */#define MACRO_VECTOR_DECLARE(func_name_in_macro) void func_name_in_macro(std::vector&arr)/* 宏定义适配器 */#define MACRO_VECTOR_IMPLEMENT(func_name_in_macro) MACRO_VECTOR_DECLARE(func_name_in_macro){func_name_in_macro(arr, arr.size());}#include/* 接口相同,仅函数名不同,故批量定义 */MACRO_VECTOR_INT_DECLARE(_bubsort);MACRO_VECTOR_INT_DECLARE(_bubsort_);MACRO_VECTOR_INT_DECLARE(_isort);MACRO_VECTOR_INT_DECLARE(_isort_);MACRO_VECTOR_INT_DECLARE(_ssort);MACRO_VECTOR_INT_DECLARE(_ssort_);MACRO_VECTOR_INT_DECLARE(_selsort);MACRO_VECTOR_INT_DECLARE(_msort);MACRO_VECTOR_INT_DECLARE(_qsort_easy);MACRO_VECTOR_INT_DECLARE(_qsort);MACRO_VECTOR_INT_DECLARE(_hsort);/* -------------------------------------- */MACRO_VECTOR_DECLARE(_bubsort);MACRO_VECTOR_DECLARE(_bubsort_);MACRO_VECTOR_DECLARE(_isort);MACRO_VECTOR_DECLARE(_isort_);MACRO_VECTOR_DECLARE(_ssort);MACRO_VECTOR_DECLARE(_ssort_);MACRO_VECTOR_DECLARE(_selsort);MACRO_VECTOR_DECLARE(_msort);MACRO_VECTOR_DECLARE(_qsort_easy);MACRO_VECTOR_DECLARE(_qsort);MACRO_VECTOR_DECLARE(_hsort);#endif /*_MYSORTLIB_H*/
实现如下:
#define swap(a,b) {int tmp_that_must_be_unique=a; a=b; b=tmp_that_must_be_unique;}/* 适配器批量生产 */MACRO_VECTOR_IMPLEMENT(_bubsort);MACRO_VECTOR_IMPLEMENT(_bubsort_);MACRO_VECTOR_IMPLEMENT(_isort);MACRO_VECTOR_IMPLEMENT(_isort_);MACRO_VECTOR_IMPLEMENT(_ssort);MACRO_VECTOR_IMPLEMENT(_ssort_);MACRO_VECTOR_IMPLEMENT(_selsort);MACRO_VECTOR_IMPLEMENT(_msort);MACRO_VECTOR_IMPLEMENT(_qsort_easy);MACRO_VECTOR_IMPLEMENT(_qsort);MACRO_VECTOR_IMPLEMENT(_hsort);/* 实际实现者 */MACRO_VECTOR_INT_DECLARE(_bubsort){ int i=len,j=0; while (i>1) { for (j=0;jarr[j+1]) swap(arr[j], arr[j+1]); } i--; }}MACRO_VECTOR_INT_DECLARE(_bubsort_){}MACRO_VECTOR_INT_DECLARE(_isort){}MACRO_VECTOR_INT_DECLARE(_isort_){}MACRO_VECTOR_INT_DECLARE(_ssort){}MACRO_VECTOR_INT_DECLARE(_ssort_){}MACRO_VECTOR_INT_DECLARE(_selsort){}MACRO_VECTOR_INT_DECLARE(_msort){}MACRO_VECTOR_INT_DECLARE(_qsort_easy){}MACRO_VECTOR_INT_DECLARE(_qsort){}MACRO_VECTOR_INT_DECLARE(_hsort){}
标签:
相关推荐:
最新新闻:
- 【天天新视野】Scala进阶之路-面向对象编程之类的成员详解
- react项目中 最新组件不能完成热更新的原因是什么?
- 研究生毕业的你收入如何?研究生勉强20万:天天观焦点
- skullcandy要多少钱?skullcandy价格介绍
- RS232和RS485有什么区别?有哪些应用? 短讯
- 手机qq相册怎么恢复?手机qq相册恢复技巧:天天热议
- 【时快讯】摩托罗拉A1200R怎么刷机?摩托罗拉A1200R刷机全攻略
- 一维空间是什么?浅谈从一维空间到十一维空间
- 字符和编码有什么区别? 一文读懂“字符与编码”
- 网页看视频没有声音怎么办?解决方法步骤-世界热文
- 天天热资讯!什么是BI?BI、CRM、EXC等数据分析解决方案详解
- 速读:自动化控制系统——C/S架构系统
- 全球热讯:品牌营销推广的主流趋势是什么?新闻发稿的优势有哪些?
- 中兴U960怎么样?4.3英寸超大电容屏触摸屏中兴U960评测
- 热推荐:高等数学笔记-苏德矿第九章-重积分-二重积分
- 如何用C++写七大经典排序代码?操作步骤-环球快资讯
- 冰箱冷藏1234567哪个冷?电冰箱夏季开几档?
- 7.2.5 dps 测试软件 7.2.5油管知名wowUP主评测
- 华为Mate30Pro怎么定位跟踪?华为Mate30Pro定位方式
- 快讯:构造器必须是私有的 工具类的特征是什么?
- Hibernate中的对象有哪些状态?Hibernate的对象有三种状态
- 上海永乐电器的地址有哪些?永乐电器地址介绍:全球报资讯
- Emulex公司介绍 Emulex公司获SolarisReady认证
- 常用的shell脚本 linux脚本之间的传递参数
- 蚂蚁宝如何申请?蚂蚁宝卡怎么激活?
- 最新资讯:数学书中求多项式系数的问题 编程上怎么办?
- 世界简讯:Application模式和Session模式有什么区别?
- 速看:91CDKEY服务协议是什么? 91CDKEY服务协议相关内容
- 今热点:Gartner:“连接型”管理者 其团队绩效高出3倍
- 全球热资讯!阿里通信170号怎么充值?170号段充值方法
- mfc100u.dll丢失怎么解决?mfc100u.dll丢失的解决方法
- 银行点钞机品牌有哪些?银行的这些品牌你了解吗?:全球要闻
- 【报资讯】银行点钞机品牌有哪些 ?银行点钞机品牌介绍
- 每日消息!mate50性能怎么样?华为mate50开箱测评分享
- 全球消息!什么是思维导图?思维导图的用途有哪些?
- 海信u958刷机教程与测评 TF方式刷机操作|天天报道
- 焦点速讯:【教程】矩阵相乘时 我们先写位移再缩放
- 注册滴滴司机要有什么条件?驾驶人准入标准 环球热头条
- 【收藏】全国各地区VPI/VCI值一览表|环球快看
- 当前快看:如何让工业烟囱和城市风格相融合?烟囱亮化工程的施工流程
- 卡普空游戏销量更新:《怪物猎人:崛起》累计售出1170万份
- 三星w589怎么样?三星W589评测详解
- 《蛊婆:东海地宫》新宣传片公开 年内上线
- 小米12spro夜景拍照怎么样?小米12spro夜景拍照效果分析
- 顶部距离小于50rpx时 导航栏不再透明显示_当前动态
- 电脑操作系统有哪些?常用的电脑操作系统有哪些?
- 电脑上动态壁纸怎么设置?电脑上动态壁纸设置方法
- 世界播报:加强物理存储基础架构的可视化——VASA
- 当前快播:酷派5210怎么拆机?酷派5210拆机教程
- 【时快讯】淘宝无法使用手机号码登录淘宝账户怎么办?解决措施
- mfc100u.dll丢失怎么解决?mfc100u.dll丢失的解决方法
- 环球新资讯:LeetCode实战:row_number函数用法
- 速读:自动化控制系统——C/S架构系统
- 世界播报:加强物理存储基础架构的可视化——VASA
- 焦点速讯:【教程】矩阵相乘时 我们先写位移再缩放
- realme GT Neo5 手机 240W 快充:充电 30 秒,通话 2 小时-环球快资讯
- GI公布《生化4RE》新演示 游戏追加新武器十字弓
- 每日热门:一加手机官宣:与原神正式达成三年期战略合作!
- 每日短讯:Pinkfong 公司与 Million Volt 合作推出全新 3D 动画情景喜剧“SEALOOK”
- DC高层解释取消《蝙蝠女》:如果发行会伤害品牌
- 苹果折叠屏笔记本将亮相:20.5寸超大屏:全球速看料
- 可口可乐版手机来了:国产知名品牌打造
- 甲骨文将Red Hat Enterprise Linux引入Oracle Cloud Infrastructure
- 20 万级别?极氪 003 零百加速进入 3 秒俱乐部,秒杀百万超跑
- 新年爆红!小刀电动车再迎产品革新,航天动力系霸气开局势不可挡
- 环球微资讯!律师谈12.4万抢购保时捷:商家不能单方面取消订单
- 网易开放暴雪游戏退款申请通道 申请截止日期6月30日|当前消息
- 卡普空更新旗下百万销量游戏名单 怪猎冰原销量突破1千万_环球即时看
- 柯南最新剧场版《黑铁的鱼影》正式海报 4月14日上映
- 网友吐槽手机APP广告乱跳转 晃一下就出现!
- 世界短讯!2023年三分热度品牌获天使轮融资3000万
- 麦克风没声音是什么原因?麦克风没声音具体解决方法
- 下划线在键盘上怎么打?下划线快捷键ctrl加什么?
- UDP端口要如何打开?UDP端口具体打开的方法步骤
- office2010免费密钥怎么找?office2010激活密钥分享及激活码使用步骤
- 本地连接在什么位置?本地连接怎样进行设置?本地连接的相关介绍
- 什么是IPX协议?ipx协议安装教程
- 系统分区是什么意思?win10系统分区怎样进行操作?
- 电脑出现wmiprvse.exe占cpu高怎么操作?wmiprvse.exe占cpu高详细处理步骤
- thumbs.db是什么文件?手机db文件怎么打开?
- 什么是ACPI?ACPI的六种状态介绍
- hiberfil文件是什么意思?hiberfil文件删除的详细步骤
- hiberfil.sys是什么文件?hiberfil.sys删除方法
- 玩穿越火线卡屏怎么办?穿越火线卡屏详细的教程展示解决步骤
- 为什么打开我的电脑很慢?打开我的电脑很慢解决方法