归并排序MergeSort
如何将两个已排序的序列归并[合并]成一个,使合并后的序列依旧有序[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相关推荐
- 基本排序算法之4——归并排序mergesort
归并排序理论上时间复杂度只有O(NlogN),但是其中存在过多临时内存分配和copy操作而不适用于内存排序,却是外部排序的基本思路.下面是我的实现: #include<iostream> ...
- 数据结构--链表--单链表归并排序mergesort
思路: 1.将链表的中点找到,对其切分成2条 2.继续步骤1,切成4条,8条...,直至每段链表只有1个元素 3.归并操作,对两两链表进行合并排序,并返回回并后的链表的头结点,依次向上递归回去 C++ ...
- 【排序】归并类排序—归并排序(逆序数问题)
文章目录 前言 归并排序(merge sort) 逆序数 结语 微信公众号:bigsai 数据结构与算法专栏 前言 在排序中,我们可能大部分更熟悉冒泡排序.快排之类.对归并排序可能比较陌生.然而事实上 ...
- PHP实现归治算法,PHP排序算法系列之归并排序详解
归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序 ...
- c++归并排序_合并排序法
一.合并排序(Merge Sort) 就是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个 有序表,那么称为二路合并.对于一个原始的待排序序列,往往可以通过分割的方法来归结为多路合 并排序 ...
- 数据结构排序法之堆排序he归并排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法.堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点. 堆排序的时间,主要由建立初始 ...
- 快速排序伪代码_归并排序之入门到quot;放弃quot;
归并排序之入门到"放弃" 前面我们已经讲解过了冒泡排序.选择排序.插入排序. 希尔排序.本次我们将讲解归并排序,希望大家学习完之后,能够徒手快速手写一个归并排序的实现代码. 由来 ...
- 快速排序算法_经常用到的的排序(快速排序和归并排序)简单的计算机算法学习...
1.快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1960年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的 ...
- 排序算法-归并排序详细图解
归并排序: 采用了分治策略 就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解. 归并的核心思想 将两个有序的数组合并成一个大的有序的数组,通过递归把待排 ...
- 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树
文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...
最新文章
- Transformer又来搞事情!百万像素高清图轻松合成,效果迷人
- 定制linux版本,Instalinux:在线自由定制 Linux 发行版
- 出道50年+!乘风破浪的编程语言们,能二次翻红吗?
- .Net 高效开发之不可错过的实用工具(转载)
- C语言:计算1*2*3*....*100,即求100!。
- 软件测试工程师笔试题目
- SharePoint中CAML日期格式
- 软件测试过程与方法_第1单元
- 转载:破解DR.COM实现共享上网方法大搜罗(抱歉,直接转载
- 存储服务器 自建,搭建及了解存储服务器
- va_list 原理以及用法
- mac系统下,vm虚拟机打不开/dev/vmmon,如何解决?
- mysql errno: 1146_解决MySQL复制出错 Last_SQL_Errno:1146
- iOS和iPad OS 14 Beta 4发行说明
- 认证 (authentication) 和授权 (authorization)小记
- Matlab 非线性回归
- 学习笔记12--基于专用短程通信的车联网技术
- spring boot 采坑
- python-opencv控制鼠标操作
- 农村产权交易服务平台二次开发html源码