MergeSort 归并排序
归并排序算法:
思路,设置left,mid,right三个参数,对mid的左和右分别再进行递归调用归并排序算法,直到每个数组中只有1时返回,最终完成归并排序,具体思路见程序
注:归并排序的时间复杂度为O(nlogn),空间复杂度为O(n+logn)。
代码实现:
//归并排序(排序后为从小到大)
#include <iostream>
#include <algorithm>
using namespace std; void Merge(int *data, int left, int mid, int right){int *temp = new int[right - left + 1];//new一个temp保存归并后的数据int ind = 0, i = left, j = mid + 1;while (i <= mid&&j <= right){//将两个待归并的数据进行比较存入,注意边界值temp[ind++] = (data[i] < data[j]) ? data[i++] : data[j++];}while (i <= mid){//将一个数组中剩余的数据存入temp[ind++] = data[i++];}while (j <= right){temp[ind++] = data[j++];}for (int i = left; i <= right; ++i){//将temp中的数据放到data里data[i] = temp[i - left];}delete[] temp;
}void MSort(int *data, int left, int right){//递归实现归并排序if (left >= right) return;else{int mid = left + (right - left) / 2;MSort(data, left, mid);//分别对左右进行归并排序MSort(data, mid + 1, right);Merge(data, left, mid, right);}
}int main(){ int a[] = { 9, 1, 5, 8, 3, 7, 4, 6, 2 };cout << "before sorted:" << endl;for (size_t i = 0; i < 9; ++i){//输出 cout << a[i] << " ";}cout << endl;int a_size = sizeof(a) / sizeof(a[0]);int *p = a;MSort(p,0,a_size-1);cout << "after sorted:" << endl;for (size_t i = 0; i < 9; ++i){//输出cout << p[i] << " ";}cout << endl; return 0;
}
程序输出:
MergeSort 归并排序相关推荐
- JavaScript实现MergeSort归并排序算法(附完整源码)
JavaScript实现MergeSort归并排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 MergeSort.js完整源代码 Comparator.js完整 ...
- # mergeSort 归并排序
mergeSort 归并排序 1. 基本描述 将两个 有序 的数列 合并成一个有序数列.归并排序的核心就是这么一句话. 这里有两个重点 前提 有序数列 合并 问题就在这里,一个无序的数组怎 ...
- CC00050.hadoop——|HadoopMapReduce.V23|——|Hadoop.v23|MR算法扩展|MergeSort归并排序|
一.[MR算法扩展之MergeSort归并排序][MR算法扩展之QuickSort快速排序]:Mergesort归并排序 二.合并 三.合并细节 ### --- 不断地将当前序列平均分割成 2个子序列 ...
- java的mergesort函数_归并排序 - Algorithms, Part I, week 3 MERGESORTS
前言 本周讲解两个50多年前发明,但今天仍然很重要的经典算法 (归并排序和快速排序) 之一 -- 归并排序,几乎每个软件系统中都可以找到其中一个或两个的实现,并研究这些经典方法的新变革.我们的涉及范围 ...
- php 归并排序,详解PHP归并排序的实现
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表.归并排序的一个缺点是它需要存储器有另一个大小等于数据项数目的数组.如果初始数组几乎占满整个存储器,那么归并排序将不能工作,但是 ...
- 排序算法:归并排序、快速排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...
- 举例详解PHP归并排序的实现
来源:https://blog.phpha.com/backup/archives/1683.html 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干 ...
- java的归并排序算法_归并排序算法Java实现
一. 算法描述 归并排序采用了分治策略(divide-and-conquer),就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解. 归并排序将待排序数组 ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
最新文章
- MAML-Tracker: 目标跟踪分析:CVPR 2020(Oral)
- 数据维度爆炸怎么办?详解5大常用的特征选择方法
- makefile中的include *******
- python外星人入侵不显示子弹_【Python】python外星人入侵,武装飞船,代码写好后,不显示子弹...
- Android动画的实现原理
- Apache Hudi入门应用
- 钩子编程(HOOK) 安装进程内键盘钩子 (1)
- 【优化算法】蝴蝶优化算法(MBO)【含Matlab源码 952期】
- 0字符串 if mapper test_降龙-第20章:Mapper解析
- 珠海华润银行网银密码控件
- 定时任务中cron表达式详解
- 滤波器主要参数及特性
- 服务器加什么网站才打开快,如何优化让网站打开速度更快些呢?
- 如何给电脑重装系统--一点通
- 卡普公司鸿蒙手机,每人日接受信息量相当于看174份报纸
- H12-821题库详解
- AtCoder Beginner Contest 249题解(E,F)
- 2020.4.22课堂笔记(继承、多态、抽象类、抽象方法)
- 厦大生物科学类要考计算机等级吗,厦门大学生命科学学院调剂经验分享
- 怎么样在Excel单元格里批量加小数点和单位?
热门文章
- python 无头浏览器xhr 文件_Python对Selenium调用浏览器进行封装包括启用无头浏览器,及对应的浏览器配置文件...
- 输出图片任意点的像素坐标(结合IRFANVIEW使用)
- phpcms首页:调用全站所有tags关键字 - tags总结篇
- 怎么清空topic数据_20.Roscpp/Rospy:Topic_demo
- 如何进程linux c,在Linux上,在C中,我如何获得进程的所有线程?
- Berrycast – 屏幕录制分享工具[Windows/macOS]
- LimeSurvey问卷调查管理系统
- Guojiz网址导航系统PHP网站源码
- 计算机密码忘了 开不了机怎么办,电脑设了开机密码现在忘了开不了机怎么处理?...
- Linux 常用的 命令,移动,创建,删除等