二路归并排序的C++实现

#include<iostream>
#include<vector>
using namespace std;typedef int elem;void mergeArray(vector<elem>&, int, int, int, int (*)(elem, elem));
void mergeSort(vector<elem>&, int, int, int (*)(elem, elem));
int comp(elem, elem);int main(void){elem a[]{4, 6, 5, 1, 7, 2};vector<elem> v(a, a+6);mergeSort(v, 0, 5, comp); for (vector<elem>::iterator it=v.begin(); it!=v.end(); ++it)cout<<*it<<" ";return 0;
}int comp(elem a, elem b){ return a-b; //升序 //return b-a; //降序
}void mergeArray(vector<elem>& v, int start, int mid, int end, int (*cmp)(elem, elem)){if(start >= end)return;    int i=start, j=mid+1;vector<elem> temp;while (i<=mid && j<=end){if(cmp(v[i], v[j]) <= 0){temp.push_back(v[i++]);}else{temp.push_back(v[j++]);}}    while (i<=mid){temp.push_back(v[i++]);}while (j<=end){temp.push_back(v[j++]);}for (int i=start; i<=end;++i)v[i] = temp[i-start];
}void mergeSort(vector<elem>& v, int start, int end, int (*cmp)(elem, elem)){if(start >= end)return;int mid = (start + end) / 2;    mergeSort(v, start, mid, cmp);mergeSort(v, mid+1, end, cmp);mergeArray(v, start, mid, end, cmp);
}

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

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

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

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

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

  3. C++实现二路归并排序算法

    排序算法分为五大类,一共是有九种,如下: 插入类:直接插入排序.折半插入排序.希尔排序 交换类:冒泡排序.快速排序 选择类:简单选择排序.堆排序 归并类:二路归并排序 基数类:多关键字排序 九种算法的 ...

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

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

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

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

  6. 二路归并排序Python实现-III

    二路归并排序Python实现-III 归并排序 是一种 效率比较高并且稳定的算法.时间复杂度 O(NLog(N)),空间复杂度 O(N). 归并排序(Merge Sort)是建立在归并操作上的一种有效 ...

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

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

  8. Sort List(二路归并排序)

    题目链接:https://leetcode.com/problems/sort-list/description/ 题目要求:对链表进行排序,时间复杂度O(n),常数的空间复杂度 两种解法,本质上都是 ...

  9. 二路归并排序 Implemented With C++

    文章目录 Definition Implementation Performance Definition 对于一个长度为 n n n 的表,我们可以把这张表看成是由 n n n 个长度为 1 1 1 ...

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

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

最新文章

  1. 中国式姥姥上热搜感动无数人:有妈妈在,我才敢生娃
  2. 【机器视觉】 set_fuzzy_measure算子
  3. MindManager 报错:Click to restart mindjet player 解决方法
  4. java语音播报案例
  5. c语言指针和数组的联系
  6. sql server 利用 For Xml Path('') 多行数据拼接成一个字符串
  7. 云原生时代,需要什么样的数据库?
  8. Python3.7.2版本出现ModuleNotFoundError: No module named 'paramiko'解决办法
  9. 基于 cm-11 源码编译模拟器
  10. mysql给日期创建索引_如何在MySql的DATETIME字段的日期部分创建索引
  11. setFitView的zoom只是整数,导致缩放尺寸不合适的解决方案
  12. 优酷KUX1080转码工具如何将KUX视频转换成MP4格式
  13. Windows Server AppFabric分布式缓存研究
  14. FPS之游戏透视原理(一)
  15. Scala教程-详细全部
  16. 软件验证码显示服务器连接错误,验证码总是提示错误,验证码错误的解决办法 专家详解...
  17. embarrass的用法和搭配_embarrass_embarrass的意思和用法搭配
  18. 百度地图动态添加marker的图片显示问题
  19. form 表单提交后,使页面不跳转
  20. 从抓取豆瓣电影聊高性能爬虫思路(纯干货)

热门文章

  1. 射频电路设计的常见问题及经验总结
  2. 维修电工技师技能实训考核装置QY-W05
  3. Centos8下修改ssh端口号
  4. tomcat8下载时各个版本的说明
  5. 小写字母转大写代码HTML,CSS控制转换字母的大写和小写
  6. 微信朋友圈照片格式html,实测:微信朋友圈这样发图最清晰
  7. 7.1 php7.0 微擎_php7.1以上微擎-人人商城小程序授权登录问题
  8. 通过bat文件一键配置电脑IP
  9. 通过Windows的bat方式一键给计算机网卡替换IP地址
  10. 软件测试中测试文档的编写:测试流程测试用例