归并排序详解

文章目录

  • 归并排序过程
  • demo(完整y总模板)
  • 结束语
    • 每个人心里都有一团火,路过的人却只看见了烟。加油xdm!!!

归并排序过程

基础知识:我们知道归并排序也是一种基于分治法思想的排序


过程分析:
假如我们有一个数组需要我们排序

 int num[4]={6,4,90,-30};

归并排序会先把这个数组划分成两个部分(划分过程我用代码配合注释描述),然后排好这两个部分,最后对整个数组进行排序。

 int low=0,high=3,mid=low+high>>1;mager(num,low,mid),mager(num,mid+1,high);

我们对这个数组进行分区,现在分的区域分别是 [0,1] 和 [2,3]
那么我们怎么样对着两个分好区域的数组进行排序呢?

 int k = 0, temp[high-low+1], i = low, j = mid + 1;while( i <= mid && j <= high){if(num[i] <= num[j])temp[k++]=num[i++];elsetemp[k++]=num[j++];}while(i <= mid){temp[k++]=num[i++];}while(j<=high){temp[k++]=num[j++];}for(i=low,k=0;i<=high;i++,k++)num[i]=temp[k];

以上代码就完成了排序:
1.其实它的流程是用一个新的数组
2.一直存放我们分成两部分区的小的那一个元素的值。一直放到一个部分放完。
3.然后把没有放完的一个区放入这个新数组(左右两边放好后是这样的)

4.最后把这个新数组每一个值更新到原数组。

5.重复上一次的排序操作,合并[4,6] , [-30,90]为 [-30,4,6,90],这时候,对于这个四个数的序列就排序完成了。

6.注意其实我们这个merger函数是一个递归调用函数

demo(完整y总模板)

#include <stdio.h>void merge_sort(int q[], int l, int r)
{// 1.判边界if (l >= r) return;// 2.定分界点int mid = l + r >> 1;// 递归排序子序列merge_sort(q, l, mid), merge_sort(q, mid + 1, r);// 3.归并排序(双指针法)int k = 0, i = l, j = mid + 1,tmp[r-l+1];while (i <= mid && j <= r)if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];else tmp[k ++ ] = q[j ++ ];// 某个子序列走到最后了,将另一个序列剩余部分加入到 tmp 中while (i <= mid) tmp[k ++ ] = q[i ++ ];while (j <= r) tmp[k ++ ] = q[j ++ ];// 将排序结果 tmp 重新覆盖掉 qfor (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}int main()
{int num[10]={26,32,65,74,0,32,0,1,-10,30};merge_sort(num,0,9);for(int i=0;i<10;i++)printf("%d ",num[i]);return 0;
}

结束语

每个人心里都有一团火,路过的人却只看见了烟。加油xdm!!!

归并排序详解(Acwing 归并排序y总模板)相关推荐

  1. php 归并排序,详解PHP归并排序的实现

    归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表.归并排序的一个缺点是它需要存储器有另一个大小等于数据项数目的数组.如果初始数组几乎占满整个存储器,那么归并排序将不能工作,但是 ...

  2. 归并排序详解(python实现)

    归并排序详解(python实现) 因为上个星期leetcode的一道题(Median of Two Sorted Arrays)所以想仔细了解一下归并排序的实现.

  3. 归并排序过程实现c语言,C语言归并排序详解

    C语言归并排序详解 发布日期:2015-12-31 11:16 来源: 标签: 编程语言 C教程 C语言归并排序 C语言归并排序算法 本章我们主要学习C语言实现排序算法之归并排序,对归并排序的原理及实 ...

  4. es6字符串添加html标签,JavaScript_详解JavaScript ES6中的模板字符串,在 ES6 中引入了一种新的字符 - phpStudy...

    详解JavaScript ES6中的模板字符串 在 ES6 中引入了一种新的字符串字面量 - 模板字符串,除了使用反引号 (`) 表示,它们看上去和普通的字符串没有什么区别.在最简单的情况下,他们就是 ...

  5. js模板字符串自定义类名_详解JavaScript ES6中的模板字符串

    这篇文章主要介绍了详解JavaScript ES6中的模板字符串,JS的ES6版本带来诸多简洁化方面的重大改进,需要的朋友可以参考下 在 ES6 中引入了一种新的字符串字面量 - 模板字符串,除了使用 ...

  6. 归并排序详解(Java语言描述 萌新向)

    目录 一,归并排序简介 二,归并排序原理 三,归并排序图解 1,归并总体的图解 2,合并两个子组的流程 3,归并排序动画演示 四,归并排序代码实现与分析(Java) 1,方法的合集 2,Merge类各 ...

  7. pyzabbix 删除触发器_zabbix设置邮件报警, Zabbix常用Key值, zabbix触发器表达式详解, zabbix制作自己模板...

    zabbix设置邮件报警 方法一:说明此方法,会产生中文乱码问题 第一步:首先安装mailx组件并配置好能够通过三方邮箱发送邮件 yum -y install mailx 然后编辑mailx的配置文件 ...

  8. 树状数组详解(附图解,模板及经典例题分析)

    导言 深藏于算法与数据结构中的思想非常的美妙,尤其是当我们一个一个攻克其中的难点,体会其中蕴含的"哲理"时, A 题的自信力也会有所增加,心情也会格外的舒爽.最近重新接触了树状数组 ...

  9. Makefile详解(一)-介绍及总述

    以下内容为转载:http://zhan.renren.com/ilinux?from=template   Makefile详解 序       编译时,编译器需要的是语法的正确,函数与变量的声明的正 ...

最新文章

  1. zabbix 3.2 mysql模板_Zabbix-3.0.3使用自带模板监控MySQL
  2. Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据--转
  3. 机器学习如何应用到实际生活和创业中
  4. 感受冬日和煦的春风。。。
  5. torchvision中Transform的normalize
  6. 前端学习(1043):回车把数据存储到本地存储里面
  7. 更新Docker中的Jenkins版本
  8. Dubbo 是如何控制并发数和限流的?
  9. 工厂模式(简单、普通、抽象)
  10. 条件注释判断浏览器版本
  11. linux wget无法下载文件,wget下载文件
  12. Nopi的学习笔记(C#篇)
  13. FastStone Capture—屏幕录像
  14. 技术小白之微信小程序的图片加文字链接
  15. java实时监控系统_JavaMonitor
  16. python绘制人物关系图_文本分析之制作网络关系图——Python
  17. ipa图片解密 php,ipa文件详解 - 如何提取App图片
  18. 软件行业装机卖软件模式没落 转型SaaS服务趋势明显
  19. selenium自动化爬取Boss直聘职位数据 按照热门城市
  20. protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

热门文章

  1. (超详细、适合新手)QQ三国实现24小时挂机摆摊卡键喊话
  2. 2021年美亚杯个人赛复盘
  3. uni-app运行在手机或模拟器上(使用雷电模拟器)
  4. 【转载】ABAP CDS 函数
  5. 【论文阅读笔记】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  6. vue项目 element表格数据行转列数据互转
  7. Eclipse+tomcat开发j2ee经典入门例子
  8. (2016/02/19)多传感器数据融合算法---9轴惯性传感器
  9. pxtorem插件配置
  10. 我曾被stormzhang拉黑过