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

排序---归并排序(简单优化前后比较)

前言

个人小记


一、优化方案

将递归调用中的创建数组空间提出,减少数组空间创造次数,从而减少运行时间。

二、代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_ARR 100000
#define swap(a,b)\
{\__typeof(a) __c=a;\a=b,b=__c;\
}
#define TEST(func,arr,l,r)\
{\printf("test:%s\t",#func);\int n=r-l;\int* t=(int*)malloc(sizeof(int)*n);\memcpy(t,arr,sizeof(int)*n);\long long a=clock();\func(t,l,r);\long long b=clock();\if(check(t,n))printf("OK %lldms\n",(b-a)*1000/CLOCKS_PER_SEC);\else printf("FAIL");\free(t);\
}
int check(int* t,int n)
{for(int i=1;i<n;i++){if(t[i-1]>t[i])return 0;}return 1;
}int* init_arr(int n)
{int* arr=(int*)malloc(sizeof(int)*n);for(int i=0;i<n;i++)arr[i]=rand()%100000;return arr;
}
int *buff;
void OP_merger_sort(int *arr,int l,int r)
{if(r-l<=1) return ;int mid=(r+l)/2;int p1=l,p2=mid;OP_merger_sort(arr,l,mid);OP_merger_sort(arr,mid,r);int i=0;while(p1<mid||p2<r){if(p2==r||(p1<mid&&arr[p1]<arr[p2])){buff[i++]=arr[p1++];}else buff[i++]=arr[p2++];}for(int i=l;i<r;i++)arr[i]=buff[i-l];return ;
}
void merger_sort(int *arr,int l,int r)
{if(r-l<=1) return ;int mid=(r+l)/2;int p1=l,p2=mid;int* temp=(int *)malloc(sizeof(int)*(r-l));merger_sort(arr,l,mid);merger_sort(arr,mid,r);int i=0;while(p1<mid||p2<r){if(p2==r||(p1<mid&&arr[p1]<arr[p2])){temp[i++]=arr[p1++];}else temp[i++]=arr[p2++];}for(int i=l;i<r;i++)arr[i]=temp[i-l];free(temp);return ;
}int main()
{srand((unsigned)time(0));int *arr=init_arr(MAX_ARR);buff=(int *)malloc(sizeof(int)*MAX_ARR);TEST(merger_sort,arr,0,MAX_ARR);TEST(OP_merger_sort,arr,0,MAX_ARR);free(arr);free(buff);return 0;
}

二、测试结果

test:merger_sort        OK 18ms
test:OP_merger_sort     OK 16ms

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网球运动目标检测跟踪
  • 本周MoonBit新增Wasm1引用计数支持、语法即将添加错误恢复机制
  • 复合语句、数值交换、三个数的最值与排序
  • Ubuntu20.04-SLAM软件安装
  • tcp协议的延迟应答(介绍+原则),拥塞控制(拥塞窗口,网络出现拥塞时,滑动窗口的大小如何确定,慢启动,阈值)
  • MySQL系列-语法说明以及基本操作(一)
  • Qt设置进程环境变量
  • 低代码开发应用:国企数字化转型的思考与探索
  • EVS9329-ES驱动器EVS9329ES可议价
  • Python与MySQL连接和使用
  • PyTorch 维度变换-Tensor基本操作
  • Web前端后端精通:深度解析与技能进阶
  • Vue进阶之Vue无代码可视化项目(四)
  • ArcGIS for js 4.x 加载图层
  • 部署LVS-DR群集
  • [PHP内核探索]PHP中的哈希表
  • [case10]使用RSQL实现端到端的动态查询
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 0x05 Python数据分析,Anaconda八斩刀
  • C++类中的特殊成员函数
  • CEF与代理
  • Date型的使用
  • iOS编译提示和导航提示
  • JavaScript设计模式与开发实践系列之策略模式
  • java第三方包学习之lombok
  • linux安装openssl、swoole等扩展的具体步骤
  • orm2 中文文档 3.1 模型属性
  • Selenium实战教程系列(二)---元素定位
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 目录与文件属性:编写ls
  • 入门级的git使用指北
  • 原生 js 实现移动端 Touch 滑动反弹
  • 阿里云服务器如何修改远程端口?
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ###STL(标准模板库)
  • (1)SpringCloud 整合Python
  • (2)nginx 安装、启停
  • (21)起落架/可伸缩相机支架
  • (26)4.7 字符函数和字符串函数
  • (Forward) Music Player: From UI Proposal to Code
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)stm32之通信协议
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转)ABI是什么
  • (转)ORM
  • ... 是什么 ?... 有什么用处?
  • .bashrc在哪里,alias妙用
  • .Net 6.0--通用帮助类--FileHelper
  • .NET Core引入性能分析引导优化