一、伪代码

1.      MergeSort(A,l,r)


2.      Merge(A,l,m,r)

二、C/C++代码 

/*******************************************************************

Function:Merge
Description:将两个有序的数组A[l,m]和A[m+1,r]合并为一个有序的数组
Input:数组A及下标l,m,r
Output:有序数组A
********************************************************************/
void Merge(int A[],int l,int m,int r){int x = m-l+1,y=r-m;//x表示数组A[l...m]的长度,y表示数组A[m+1,r]的长度int *B = new int[x];int *C = new int[y];for(int i=0,j=l;i<x;i++,j++)//将A[l,m]复制到B中B[i]=A[j];for(int i=0,j=m+1;i<y;i++,j++)//将A[m+1,r]复制到C中C[i]=A[j];int i=0,j=0,k=l;//i是数组B的游标,j是数组C的游标,k是数组A的游标while(i<x&&j<y){if(B[i]<=C[j])A[k++]=B[i++];elseA[k++]=C[j++];}//如果B或者C中还有剩余的数字,则全部复制到A中if(i>=x)while(j<y)A[k++]=C[j++];elsewhile(i<x)A[k++]=B[i++];
}
/************************************************
Function:MergeSort
Description:对数组A[l,r]进行二分归并排序
Input:数组A及其下标l,r
Output:有序数组A
*************************************************/
void MergeSort(int A[],int l,int r){if(l<r){int m = (l+r)/2;MergeSort(A,l,m);MergeSort(A,m+1,r);Merge(A,l,m,r);}
}

三、时间复杂度

由分治的思想知,对一个数组排序可以转换为将原数组一分为二,各种排序后在合并的过程。设该算法的最坏时间复杂度为W(n),则递推公式如下:

其中n-1是将两个有序数组合并成一个有序数组的时间复杂度。

解法一:

解法二:

利用https://blog.csdn.net/bqw18744018044/article/details/79596014中介绍的主定理。

【排序(C++实现)】:二分归并排序相关推荐

  1. 分治算法的设计思想(二分检索、二分归并排序)

    分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...

  2. 插入排序、选择排序、快速排序以及归并排序(附Python代码)

    排序算法基本原理以及复杂度等知识点可跳转至该博客了解https://www.cnblogs.com/onepixel/p/7674659.html ,本博客主要对排序算法性能进行对比以及记录对比过程发 ...

  3. 二分归并排序算法分析

    数组排序 使用二分归并排序算法,对n个不同的数构成的数组A[1-n]进行排序,其中n=2^k 算法思想 二分归并排序是一种分治算法.这个算法不断地将一个数组分为两部分,分别对左子数组和右子数组排序,然 ...

  4. 图解排序算法(四)之归并排序

    图解排序算法(四)之归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide) ...

  5. 实现二分归并排序算法_如何实现归并排序?

    归并排序 归并排序是分而治之的排序算法. 划分步骤很简单:将当前数组分成两半(如果N是偶数,则将其完全平等,或者如果N是奇数,则一边稍大于一个元素),然后递归地对这两半进行排序. 递归写法 归并排序递 ...

  6. java 二分查找 排序_java 冒泡排序 二分查找

    下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...

  7. 快速排序算法_经常用到的的排序(快速排序和归并排序)简单的计算机算法学习...

    1.快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1960年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的 ...

  8. js排序算法详解-归并排序

    js系列教程5-数据结构和算法全解 js排序算法详解-归并排序 归并排序其实可以类比二分法,二分法其实就是二等分的意思,简而言之就是不断和新序列的中间值进行比较.归并排序似乎有异曲同工之妙,什么意思呢 ...

  9. java 排序算法总结,Java排序算法总结之归并排序

    本文实例讲述了Java排序算法总结之归并排序.分享给大家供大家参考.具体分析如下: 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作.和快速排序类似,让我们一起来看 ...

  10. 希尔排序、快速排序、归并排序的实现分析以及时间复杂度

    高级排序 希尔排序 快速排序 归并排序 希尔排序 希尔排序是插入排序的一种,又称"缩小增量排序",是插入排序算法的一种更高效的改进版本. 我在另一篇文章中说插入排序的时候,会有一个 ...

最新文章

  1. SpringBoot学习之启动方式
  2. 获取java hashCode分布
  3. 进大厂全靠自学,微软头条实习生现身说法:我是这样自学深度学习的丨课程传送门...
  4. 修改项目图标_快速转换和制作图标
  5. 压缩感知 的自我理解
  6. VS2010重构学习总结
  7. 地图统计_博客 城市访问量统计并且通过Echarts+百度地图展示
  8. HTTP之content-type相关
  9. 华为鸿蒙系统学习笔记5-华为方舟编译器正式开源及相关源码下载
  10. 幸福的源泉:Life is about choices 幸福可以选择
  11. confluence 统计页面访问量插件Page View Tracker
  12. 《linux c编程指南》学习手记2
  13. 免费可商用字体 超好用的德拉黑体
  14. 使用QT连接access数据库详解(清晰、透彻)
  15. MCS-51单片机的中断系统
  16. CentOS-8 dnf 前端工具学习笔记
  17. 印度电影,又一次让我们不得不服
  18. ES插件es-head下载和安装
  19. chnsenticorp数据集及其处理
  20. 苏格拉底和柏拉图甩手的故事

热门文章

  1. PP苹果助手 v2.3.0 官方版
  2. emacs在windowxp下的一些配置
  3. VMware Cloud Director 10.3.1 - 云计算调配和管理平台
  4. VRay5.0 for 3dsMax2016-2021及素材库
  5. GCC和C99标准中inline
  6. DROOL 5分钟上手Case
  7. html5+css3网页设计案例教程 pdf,HTML5+CSS3网页设计及制作案例教程.pdf
  8. latex模板——计算机学报
  9. Cesium中的Heading/Pitch/Roll
  10. springboot开源热门项目-bootdo修改支持多数据源