如何将两个已排序的序列归并[合并]成一个,使合并后的序列依旧有序[Merge]


条件:两升序序列A [begin, end] 序列B[front, back]

准备
- 定义一临时空间C[0, size(A) + size(B) - 1]
- 定义三变量i = begin,j = front, k = 0

过程
1. 比较A[i]与B[j]的大小,如果A[i] < B[j],C[k++] = A[i++], 否则C[k++] = B[j++];
2. 循环直到A.B其中一个序列遍历完为止。
3. 循环跳出后另外一序列依然有剩余元素,依次将其赋值给C即可。

C++代码

void Merge(int* pData, int begin, int mid, int end)
{if (NULL == pData)return;int* pDest = new int[end - begin + 1];if (NULL == pDest)return;int i = begin;int j = mid + 1;int k = 0;while (i <= mid && j <= end){if (pData[i] <= pData[j])pDest[k++] = pData[i++];elsepDest[k++] = pData[j++];   }// 将未遍历到最后的序列剩余元素依次赋给临时空间while (i <= mid)pDest[k++] = pData[i++];while (j <= end)pDest[k++] = pData[j++];// 将排序后的值复制回原区间i = begin;k = 0;while (i <= end)pData[i++] = pDest[k++];delete []pDest;
}

如何对序列进行归并排序[MergeSort]


过程:
1. 将序列按中间位置进行划分。
2. 如果划分后的序列元素个数大于1,继续进行划分,直到序列元素个数为1。
3. 之后进行归并操作,最后整个序列全部有序。

C++代码

void MergeSort(int* pData, int begin, int end)
{if (begin >= end)return;int mid = (begin + end) / 2;MergeSort(pData, begin, mid);MergeSort(pData, mid + 1, end);Merge(pData, begin, mid, end);
}

归并排序MergeSort相关推荐

  1. 基本排序算法之4——归并排序mergesort

    归并排序理论上时间复杂度只有O(NlogN),但是其中存在过多临时内存分配和copy操作而不适用于内存排序,却是外部排序的基本思路.下面是我的实现: #include<iostream> ...

  2. 数据结构--链表--单链表归并排序mergesort

    思路: 1.将链表的中点找到,对其切分成2条 2.继续步骤1,切成4条,8条...,直至每段链表只有1个元素 3.归并操作,对两两链表进行合并排序,并返回回并后的链表的头结点,依次向上递归回去 C++ ...

  3. 【排序】归并类排序—归并排序(逆序数问题)

    文章目录 前言 归并排序(merge sort) 逆序数 结语 微信公众号:bigsai 数据结构与算法专栏 前言 在排序中,我们可能大部分更熟悉冒泡排序.快排之类.对归并排序可能比较陌生.然而事实上 ...

  4. PHP实现归治算法,PHP排序算法系列之归并排序详解

    归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序 ...

  5. c++归并排序_合并排序法

    一.合并排序(Merge Sort) 就是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个 有序表,那么称为二路合并.对于一个原始的待排序序列,往往可以通过分割的方法来归结为多路合 并排序 ...

  6. 数据结构排序法之堆排序he归并排序

    堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法.堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点. 堆排序的时间,主要由建立初始 ...

  7. 快速排序伪代码_归并排序之入门到quot;放弃quot;

    归并排序之入门到"放弃" 前面我们已经讲解过了冒泡排序.选择排序.插入排序. 希尔排序.本次我们将讲解归并排序,希望大家学习完之后,能够徒手快速手写一个归并排序的实现代码. 由来 ...

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

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

  9. 排序算法-归并排序详细图解

    归并排序: 采用了分治策略 就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解. 归并的核心思想 将两个有序的数组合并成一个大的有序的数组,通过递归把待排 ...

  10. 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树

    文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...

最新文章

  1. Transformer又来搞事情!百万像素高清图轻松合成,效果迷人
  2. 定制linux版本,Instalinux:在线自由定制 Linux 发行版
  3. 出道50年+!乘风破浪的编程语言们,能二次翻红吗?
  4. .Net 高效开发之不可错过的实用工具(转载)
  5. C语言:计算1*2*3*....*100,即求100!。
  6. 软件测试工程师笔试题目
  7. SharePoint中CAML日期格式
  8. 软件测试过程与方法_第1单元
  9. 转载:破解DR.COM实现共享上网方法大搜罗(抱歉,直接转载
  10. 存储服务器 自建,搭建及了解存储服务器
  11. va_list 原理以及用法
  12. mac系统下,vm虚拟机打不开/dev/vmmon,如何解决?
  13. mysql errno: 1146_解决MySQL复制出错 Last_SQL_Errno:1146
  14. iOS和iPad OS 14 Beta 4发行说明
  15. 认证 (authentication) 和授权 (authorization)小记
  16. Matlab 非线性回归
  17. 学习笔记12--基于专用短程通信的车联网技术
  18. spring boot 采坑
  19. python-opencv控制鼠标操作
  20. 农村产权交易服务平台二次开发html源码

热门文章

  1. linux三剑客之awk
  2. spring session 考虑问题解答
  3. 访问Internet 需要哪些步骤
  4. 关于网页内容加速黑科技的趣谈
  5. Xshell5 访问虚拟机Ubuntu16.04
  6. rabbitmq 安装 windows
  7. C#编程总结(十一)数字证书
  8. 关于ccflow工作流引擎报表查询权限升级的更新
  9. 路由器故障排除的思路与理论
  10. VMC to Hyper-V Import Tool 简体中文版.VZPEDIA首发