排序算法分为五大类,一共是有九种,如下:
插入类:直接插入排序、折半插入排序、希尔排序
交换类:冒泡排序、快速排序
选择类:简单选择排序、堆排序
归并类:二路归并排序
基数类:多关键字排序
九种算法的时间复杂度、空间复杂度和稳定性小结如下:

本文放出二路归并算法的排序算法代码。
八种常用的排序算法代码可以到这里下载。

二路归并排序

void merge(int R[], int low, int mid, int high)
{int len = high - low + 1;int* temp = new int[len];int i = low, j = mid + 1;   int k = 0;     while (i <= mid && j <= high) {if (R[i] <= R[j]) {temp[k] = R[i];k++;i++;}else {temp[k] = R[j];k++;j++;}}while (i <= mid) {    temp[k] = R[i];k++;i++;}while (j <= high) {    temp[k] = R[j];k++;j++;}for (k = 0; k < len; k++)R[low + k] = temp[k];
}
void mergeSort(int R[], int low, int high){if (low < high) {int mid = (low + high) / 2;mergeSort(R, low, mid);mergeSort(R, mid+1, high);merge(R, low, mid, high);for (int i = low; i <= high; i++) {cout << R[i] << " ";}cout << endl;}
}

总体

#include <iostream>
using namespace std;
void merge(int R[], int low, int mid, int high)
{int len = high - low + 1;int* temp = new int[len];int i = low, j = mid + 1;   int k = 0;     while (i <= mid && j <= high) {if (R[i] <= R[j]) {temp[k] = R[i];k++;i++;}else {temp[k] = R[j];k++;j++;}}while (i <= mid) {    temp[k] = R[i];k++;i++;}while (j <= high) {    temp[k] = R[j];k++;j++;}for (k = 0; k < len; k++)R[low + k] = temp[k];
}
void mergeSort(int R[], int low, int high){if (low < high) {int mid = (low + high) / 2;mergeSort(R, low, mid);mergeSort(R, mid+1, high);merge(R, low, mid, high);for (int i = low; i <= high; i++) {cout << R[i] << " ";}cout << endl;}
}
int main()
{int A[8] = { 49,38,65,97,76,13,27,49 };int n = 8;int R[8];low = 0;high = 7;cout << "原始数组:";for (int k = 0; k < n; k++) {R[k] = A[k];cout << R[k] << " ";}cout << endl;cout << "low=" << low << "  high=" << high << endl;mergeSort(R, low, high); //二路归并排序return 0;
}

主要参考的书籍是《数据结构高分笔记》2021版

C++实现二路归并排序算法相关推荐

  1. 数据结构源码笔记(C语言):二路归并排序

    //实现二路归并排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20 //线性表中最多元素个数typedef int ...

  2. 数据结构——二路归并排序和基数排序

    二路归并排序 算法原理 假设该数组为q,左边界为 l,右边界为 r,并设置临时数组tmp. 采用分治思想: 第一步:确定分界点: mid = l + r >>1. 第二步:递归划分左右两段 ...

  3. 2路归并排序算法(C语言)

    转载自:http://blog.csdn.net/caryaliu/article/details/7475700 将两个按值有序序列合并成一个按值有序序列,则称之为二路归并排序,下面有自底向上和自顶 ...

  4. 排序算法之——二路归并排序

    排序算法之--二路归并排序 二路归并排序的思想: 一次排序过程,将已经各自有序的两个段的数据合并一个段,并且合并后依旧有序 开始,我们认为单个数据是有序的,一个数据就是一个段,一次排序之后,两个数据就 ...

  5. 归并排序算法(C#实现)

    归并排序(Merge Sort)是利用"归并"技术来进行排序.归并是指将若干个已排序的子文件合并成一个有序的文件.归并排序有两种方式:1): 自底向上的方法 2):自顶向下的方法 ...

  6. 二路归并排序简介及其并行化

    1.归并排序简介 1.1算法思想 归并排序属于比较类非线性时间排序,比较类排序中性能最佳,应用较为广泛. 归并排序是分治法(Divide and Conquer)的一个典型的应用.将已有序的子序列合并 ...

  7. java归并排序算法

    归并排序的时间复杂度是:nlogn 主要是用到二路归并排序,也就是把两个有序集合合并为一个有序集合. 下面是我写的一个递归二路归并排序的算法: package algorithm;public cla ...

  8. 二路归并排序原理及JAVA实现

    归并类排序 基本思想:首先将原始无序序列划分为两个子序列,然后分别对每个子序列递归地进行排序,最后再将有序子序列合并. 归并排序基于分治策略思想.前面提到的基于分治的快速排序重在"分&quo ...

  9. 二路归并排序及时间复杂度分析

    序言 二路归并排序是一种效率极高的递归排序,将数组A化为有序数组时间复杂度为O(nlogn). 思想 二路归并排序分为拆分数组以及合并两个操作. 切分(自上而下)时间复杂度2*T(n/2) 每次从数组 ...

最新文章

  1. 学习LINUX第三天:最简单的LAMP组合(适合初学者)
  2. 国际:什么是程序员的优秀品质
  3. DevExtreme 学习应用[1]
  4. Mac Book 问题汇集
  5. Oracle新手笔记(2) 关于Oracle 9i或9i以上版本客户端连接Oracle 8i及8i版本以下服务器端中文字符乱码的解决办法...
  6. F5 IIS Log获取客户端源IP
  7. docker nacos mysql nginx 集群一台
  8. mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表
  9. git-撤销工作与的修改-回退缓存区的修改
  10. android学习笔记---asm.jar的使用方法--手机真机屏幕同步抓取软件
  11. qt lineedit获取内容_Qt开发中的几个关键知识点,收藏以备参考
  12. Zephry_安装与移植到Stm32F746g_disoc
  13. python3-基础2
  14. 【Unity】基础知识结构总结
  15. 2020年医美行业网络关注度分析报告
  16. 修复计算机win10,快速修复Win10系统故障的两大通用方法
  17. 中文字体压缩器并且转换(推荐阅读)
  18. pics_IE的内容顾问,PICS评级和当今的ASP.NET Flakey
  19. python爬取汽车之家数据_python 实现汽车之家车型数据爬虫
  20. 理解GCN(二)从拉普拉斯矩阵到Ncut问题

热门文章

  1. Jquery基础学习之-入门
  2. 我眼中的工程师的十个特质
  3. LiveNVR流媒体服务Onvif/RTSP平台通道配置支持编辑经度纬度可以用来标注设备位置到电子地图上
  4. ​入行快30年了,你问我计算机有啥用,我还真的要想想
  5. 01 A股10个月争取翻10倍实盘操作记录(前言)
  6. 2019-6-28 训练日记-写Java课设报告和记一次糟糕的cf比赛
  7. php语言中双引号的作用是什么,php中的单引号与双引号作用详解
  8. 怎么把1g的视频压缩到500m?
  9. 【035】中国地震台网–及时了解官方报道地震信息
  10. vue导出excel (兼容ie)