#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;
}

【排序算法】归并排序-递归方法相关推荐

  1. 经典排序算法 - 归并排序Merge sort

    经典排序算法 - 归并排序Merge sort 原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 ...

  2. python排序算法——归并排序(附代码)

    python排序算法 --归并排序 文章目录 python排序算法 --归并排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  3. 十大经典排序算法-归并排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  4. 排序算法-归并排序的实现与时间复杂度分析

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

  5. 排序算法 —— 归并排序

    归并排序算法 1.划分问题:把序列分成元素个数尽量相等的两半. 2.递归求解:把两半元素分别排序. 3.合并问题:把两个有序表合并成一个. 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用 ...

  6. 二分归并排序算法_第五篇排序算法|归并排序

    0x01,前言闲叙 最近几年很少看电视了,因为没时间看了,除了偶尔刷刷头条,基本上不会花大块的时间沉迷于电视剧,综艺,这或许就是短视频时代所带来的一些改变吧,我们都会深受其中. 0x02,先看下这篇文 ...

  7. 【算法】排序算法——归并排序

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言        归并排序是分治法在排序问题上的运用,因此为了更好地了解归并排序,首先了解 ...

  8. 八大排序算法 —— 归并排序

    归并排序 归并算法的理解比较难,是一种区别于插入算法,选择算法和交换算法的一种独特算法,需要逐步理解. 核心思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治( ...

  9. 基础排序算法----归并排序

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

  10. 排序算法-归并排序的时间复杂度分析

    归并排序,其实就是递归+合并. 归并排序将数组取中间分为两部分,两个子数组分别各自再从中间分为两个子数组,一直分下去直到不能再分.分完之后,再按照子数组大小合并为为一个有序数组,然后层层向上合并,直到 ...

最新文章

  1. VS.net 2005 试用(1)
  2. mysql 减小时_如何优化我的mysql和查询?!减少查询时间?
  3. 轻松得到C# ADO.NET的各种数据库连接字符串
  4. 小猿圈web前端简述canvas如何实现二维码和图片合成
  5. 【Matlab】如何把数组矩阵写入txt文件?并用逗号或空格隔开
  6. 如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化
  7. AdonisUI - 用于 WPF 应用程序的轻量级 UI 工具包,提供经典但增强的 Windows 视觉效果...
  8. Mysql学习总结(32)——MySQL分页技术详解
  9. Mysql存储过程老是报错_mysql中看看这个存储过程老是报错,该如何处理
  10. Hololens开发常见错误
  11. 【QT】一份值得学习的QT视频教程
  12. Installation for COMSOl(安装COMSOL)
  13. Unity开发WebGL项目开发问题与解决方法汇总
  14. 用命令行登录并操作数据库
  15. linux设置法语键盘布局,法语键盘布局图
  16. 黑白棋——C语言设计
  17. iOS 微信 唤醒客户端失败注册失败需要UniversalLink 的解决方案
  18. 蒲公英音乐种子计划海选招募正式启动
  19. 前端Vue项目调用页面web3.js:连接metaMask钱包,(查询钱包ETH余额,查询代币余额,ETH转账,代币转账,代币授权,查询授权数量,计算价格)等功能
  20. C++我记得应该是当初笔试面试常考的

热门文章

  1. kmem 反编译linux内核_24小时学通Linux内核之如何处理输入输出操作
  2. 如何创建linux 脚本,如何创建和执行shell脚本
  3. 表情识别(六)--局部特征学习和Handcrafted特征结合
  4. 网页传上服务器 是乱码,前端传到后台中文乱码问题
  5. 蓝牙学习笔记(九)——BLE超过20字节数据包传输(MTU)
  6. C语言:编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递
  7. PAT (Basic Level) Practice1010 一元多项式求导
  8. LeetCode 144 ——二叉树的前序遍历
  9. 【20181031T2】几串字符【数位DP思想+组合数】
  10. Spring源码解析(五)——自定义标签解析