//归并排序是将两个已经排好序的数列,以某一种顺序整合在一起的排序算法
//前提是要有两个已经排好序的数列!
//归并排序的时间复杂度是 O(logN*N),并且还有O(n)的空间复杂度//_MergeSort是MergeSort函数的一个子函数,通过不断地分治到单独的数上//来为归并算法提供前提,使要归并的两个数列有序//通过_MergeSort函数反复的递归调用来实现将一个无序的数列排好序//tmp开辟出来的空间的作用是:
//将排好序的数列放到tmp开辟的空间中,然后再将tmp空间里的数列放到原数组中
//实现了一个替换的作用
void _MergeSort(int *arr, int left, int right,int* tmp)
{if (left == right)return;//每次将数列进行取一半来分治,当分治到一个数时,返回int mid = left + ((right - left) >> 1);_MergeSort(arr, left, mid,tmp);//左半区间进行归并_MergeSort(arr, mid + 1, right,tmp);//右半区间进行归并int begin1 = left; int end1 = mid;int begin2 = mid+1;  int end2 = right;int i = begin1;while (begin1 <= end1&&begin2 <= end2) //注意是&&{//分别从左右两个半数列的第一个位置进行比较if (arr[begin1] > arr[begin2]){tmp[i++] = arr[begin2++];}else{tmp[i++] = arr[begin1++];}}
//跳出循环后,若还有没有比较的数列,则依次排在后面while (begin1 <= end1){tmp[i++] = arr[begin1++];}while (begin2 <=end2){tmp[i++] = arr[begin2++];}int j = left;while (j<= right){ //将tmp空间里的数列赋值到原数组中arr[j] = tmp[j];++j;}}void MergeSort(int *arr, int n)
{//在堆上开辟整个数列大小的空间int *tmp = (int*)malloc(sizeof(int)*n);_MergeSort(arr, 0, n - 1,tmp);free(tmp);}void PrintArray(int *arr, int n)
{for (int i = 0; i < n; ++i){printf("%d ", arr[i]);}
}
int main()
{int arr[] = { 9, 1, 8, 2, 7, 3, 6, 4, 5 };MergeSort(arr,sizeof(arr) / sizeof(arr[0]));PrintArray(arr, sizeof(arr) / sizeof(arr[0]));return 0;}

归并排序怎么写,看这里( MergeSort 和 _MergeSort )相关推荐

  1. 郁金香汇编代码注入怎么写看雪_雷军1994年写的诗一样的代码,我把它运行起来了!...

    这是一段古董代码了,因为在1994年,当时我的一个老师也是做汇编项目,他跟我聊过的故事是,当时是他跟一个前辈一起去现场给客户看故障,调试,用的ARM汇编,当时前辈是赚了2w,他赚到了6k的样子. 在9 ...

  2. 郁金香汇编代码注入怎么写看雪_世界黑客编程大赛冠军的汇编代码 你见过吗?...

    前几天发布了一篇"雷军22年前写的汇编代码"的文章,引起网友的热议.有人说汇编是最牛逼的编程语言,没有之一.汇编语言确实厉害,不知道你有没有见过世界黑客编程大赛冠军的作品? 雷军编 ...

  3. 郁金香汇编代码注入怎么写看雪_汇编语言入门五:流程控制(一)

    回顾 前面说到过这样几个内容: 几条简单的汇编指令 寄存器 内存访问 对应到C语言的学习过程中,无非就是这样几个内容: 超级简单的运算 变量 好了,到这里,我们继续接下来的话题,程序中的流程控制. 文 ...

  4. Java代码 怎么写很精简的代码 如何写又短又能满足需求的代码 如何写看起来很NB的代码 代码之极简之道

    目录 利用语法 1.利用三元表达式 2.利用 for-each 语句 3.利用 try-with-resource 语句 4.利用 return 关键字 5.利用 static 关键字 6.利用 la ...

  5. 二年级机器人伙伴看图写话_期末考试一二年级看图写话22篇,附范文!

    1.十二生肖开大会 转眼间,一年又接近了尾声,十二生肖又要开大会了.你看,有机灵的老鼠,有勤奋的老牛,有凶猛的老虎,有可爱的兔子,有神秘的龙,有帅气的小马,有温顺的绵羊,有雄赳赳的公鸡,还有淘气的小狗 ...

  6. 数据结构之排序【归并排序和快排的顶级优化和快排的三种原理的实现及分析】 内含动态演示图

    文章目录 引言: 1.归并排序(MergeSort) 2.快速排序的优化(顶级优化) 3.快速排序的三种思路的代码实现及分析 4.归并排序和快排第3原理的测试 引言: 刚刚去回顾了一下递归实现的几个小 ...

  7. 【恋上数据结构】归并排序 + LeetCode真题

    归并排序 前言 归并排序 序列分割-divide 序列合并-merge 合并到新序列 原地合并-merge 原地合并-merge-实现 归并排序完整代码 复杂度与稳定性 常见的递推式与复杂度 Leet ...

  8. 重点算法排序之快速排序、归并排序(上篇)

    文章目录 一.排序的概念及常见的排序算法 二.快速排序的思想及代码详解 2.1 快速排序的思想 2.2 挖坑法 2.2.1 挖坑法实现思想 2.2.2 挖坑法举例 2.2.3 挖坑法代码实现 2.3 ...

  9. 又发现一个ChatGPT体验站,辅助写代码真方便

    ♥️ 作者:Hann Yang ♥️ 主页:CSDN主页 ♥️ 2022博客之星Top58,原力榜Top10/作者周榜Top13 ♥️ "抢走你工作的不会是 AI ,而是先掌握 AI 能力的 ...

最新文章

  1. ICML 2021论文接收大排行!谷歌霸榜,国内北大第一、清华第二,华人学者表现亮眼.........
  2. ubuntu 安装nginx,php,mysql。常见错误解决
  3. 怎么看电脑屏幕尺寸_经常面对电脑怎么护眼?电脑族怎么保养身体?
  4. python多线程同步与互斥_Python之多线程:线程互斥与线程同步
  5. 开发常见错误解决(7)连接到SQL Server 2005出错
  6. 10. http 的一些说明及分析工具
  7. c语言回调函数_C语言学习第26篇---函数与指针分析 回调函数
  8. 【渝粤题库】广东开放大学 Linux 形成性考核
  9. [react] 使用React的memo和forwardRef包装的组件为什么提示children类型不对?
  10. Python绘制每个柱的颜色各不相同的三维柱状图
  11. jar包运行utf-8格式
  12. web前端开发面试题(六)
  13. 手推公式--马氏距离
  14. 信用,在中国究竟值多少钱?
  15. matlab批量下载网页文件
  16. 虚拟机装系统后无法打开系统解决方案
  17. 手把手教你从零搭建深度学习项目(附链接)
  18. 利用C/C++实现贪吃蛇
  19. 面渣逆袭:Redis连环五十二问!三万字+八十图详解!
  20. 人工智能从1.0时代到4.0时代

热门文章

  1. Spring Tool Suite4最新下载地址(持续更新)
  2. access下如何配置两个vlan_VLAN实验一:VLAN基础配置及Access接口
  3. Android文件下载导致进度条为负数
  4. 【MySQL】MySQL复制原理与主备一致性同步工作原理解析(原理篇)(MySQL专栏启动)
  5. 视频测试文件下载地址
  6. 2022 年远光杯程序设计竞赛B题不只是阶乘
  7. DB数据变更缓存分布式更新的zk分布式锁解决方案
  8. 电子企业WMS仓储管理系统解决方案
  9. js 金钱格式化(money)
  10. h5结合vant框架,实现列表上拉加载下拉刷新