【排序算法】归并排序-递归方法
#include<iostream>
#include<ctime>
#include<cstring>
#include<cstdlib>
using namespace std;void merge(int* data, int start, int mid, int end, int* result)
{int i, j, k;i = start;j = mid + 1; //避免重复比较data[mid]k = 0;while (i <= mid && j <= end) //数组data[start,mid]与数组(mid,end]均没有全部归入数组result中去{if (data[i] <= data[j]) //如果data[i]小于等于data[j]result[k++] = data[i++]; //则将data[i]的值赋给result[k],之后i,k各加一,表示后移一位elseresult[k++] = data[j++]; //否则,将data[j]的值赋给result[k],j,k各加一}while (i <= mid) //表示数组data(mid,end]已经全部归入result数组中去了,而数组data[start,mid]还有剩余result[k++] = data[i++]; //将数组data[start,mid]剩下的值,逐一归入数组resultwhile (j <= end) //表示数组data[start,mid]已经全部归入到result数组中去了,而数组(mid,high]还有剩余result[k++] = data[j++]; //将数组a[mid,high]剩下的值,逐一归入数组resultfor (i = 0; i < k; i++) //将归并后的数组的值逐一赋给数组data[start,end]data[start + i] = result[i]; //注意,应从data[start+i]开始赋值
}
void merge_sort(int* data, int start, int end, int* result)
{if (start < end){int mid = start + (end - start) / 2;//避免溢出intmerge_sort(data, start, mid, result); //对左边进行排序merge_sort(data, mid + 1, end, result); //对右边进行排序merge(data, start, mid, end, result); //把排序好的数据合并}
}
void amalgamation(int* data1, int* data2, int* result)
{for (int i = 0; i < 10; i++)result[i] = data1[i];//for (int i = 0; i < 10; i++)//result[i + 10] = data2[i];
}
int main()
{int data[10] = { 1,7,6,4,9,14,19,100,55,10 };//int data2[10] = { 2,6,8,99,45,63,102,556,10,41 };int* result = new int[10];//int* result1 = new int[20];//amalgamation(data1, data2, result);for (int i = 0; i < 10; ++i)cout << data[i] << " ";cout << endl;merge_sort(data, 0, 9, result);for (int i = 0; i < 10; ++i)cout << result[i] << " ";delete[]result;//delete[]result1;return 0;
}
【排序算法】归并排序-递归方法相关推荐
- 经典排序算法 - 归并排序Merge sort
经典排序算法 - 归并排序Merge sort 原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 ...
- python排序算法——归并排序(附代码)
python排序算法 --归并排序 文章目录 python排序算法 --归并排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...
- 十大经典排序算法-归并排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 排序算法-归并排序的实现与时间复杂度分析
归并排序 归并排序是分而治之的排序算法. 划分步骤很简单:将当前数组分成两半(如果N是偶数,则将其完全平等,或者如果N是奇数,则一边稍大于一个元素),然后递归地对这两半进行排序. 递归写法 归并排序递 ...
- 排序算法 —— 归并排序
归并排序算法 1.划分问题:把序列分成元素个数尽量相等的两半. 2.递归求解:把两半元素分别排序. 3.合并问题:把两个有序表合并成一个. 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用 ...
- 二分归并排序算法_第五篇排序算法|归并排序
0x01,前言闲叙 最近几年很少看电视了,因为没时间看了,除了偶尔刷刷头条,基本上不会花大块的时间沉迷于电视剧,综艺,这或许就是短视频时代所带来的一些改变吧,我们都会深受其中. 0x02,先看下这篇文 ...
- 【算法】排序算法——归并排序
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 归并排序是分治法在排序问题上的运用,因此为了更好地了解归并排序,首先了解 ...
- 八大排序算法 —— 归并排序
归并排序 归并算法的理解比较难,是一种区别于插入算法,选择算法和交换算法的一种独特算法,需要逐步理解. 核心思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治( ...
- 基础排序算法----归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使 ...
- 排序算法-归并排序的时间复杂度分析
归并排序,其实就是递归+合并. 归并排序将数组取中间分为两部分,两个子数组分别各自再从中间分为两个子数组,一直分下去直到不能再分.分完之后,再按照子数组大小合并为为一个有序数组,然后层层向上合并,直到 ...
最新文章
- VS.net 2005 试用(1)
- mysql 减小时_如何优化我的mysql和查询?!减少查询时间?
- 轻松得到C# ADO.NET的各种数据库连接字符串
- 小猿圈web前端简述canvas如何实现二维码和图片合成
- 【Matlab】如何把数组矩阵写入txt文件?并用逗号或空格隔开
- 如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化
- AdonisUI - 用于 WPF 应用程序的轻量级 UI 工具包,提供经典但增强的 Windows 视觉效果...
- Mysql学习总结(32)——MySQL分页技术详解
- Mysql存储过程老是报错_mysql中看看这个存储过程老是报错,该如何处理
- Hololens开发常见错误
- 【QT】一份值得学习的QT视频教程
- Installation for COMSOl(安装COMSOL)
- Unity开发WebGL项目开发问题与解决方法汇总
- 用命令行登录并操作数据库
- linux设置法语键盘布局,法语键盘布局图
- 黑白棋——C语言设计
- iOS 微信 唤醒客户端失败注册失败需要UniversalLink 的解决方案
- 蒲公英音乐种子计划海选招募正式启动
- 前端Vue项目调用页面web3.js:连接metaMask钱包,(查询钱包ETH余额,查询代币余额,ETH转账,代币转账,代币授权,查询授权数量,计算价格)等功能
- C++我记得应该是当初笔试面试常考的
热门文章
- kmem 反编译linux内核_24小时学通Linux内核之如何处理输入输出操作
- 如何创建linux 脚本,如何创建和执行shell脚本
- 表情识别(六)--局部特征学习和Handcrafted特征结合
- 网页传上服务器 是乱码,前端传到后台中文乱码问题
- 蓝牙学习笔记(九)——BLE超过20字节数据包传输(MTU)
- C语言:编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递
- PAT (Basic Level) Practice1010 一元多项式求导
- LeetCode 144 ——二叉树的前序遍历
- 【20181031T2】几串字符【数位DP思想+组合数】
- Spring源码解析(五)——自定义标签解析