二路归并排序的C++实现
二路归并排序的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++实现相关推荐
- 数据结构源码笔记(C语言):二路归并排序
//实现二路归并排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20 //线性表中最多元素个数typedef int ...
- 二路归并排序简介及其并行化
1.归并排序简介 1.1算法思想 归并排序属于比较类非线性时间排序,比较类排序中性能最佳,应用较为广泛. 归并排序是分治法(Divide and Conquer)的一个典型的应用.将已有序的子序列合并 ...
- C++实现二路归并排序算法
排序算法分为五大类,一共是有九种,如下: 插入类:直接插入排序.折半插入排序.希尔排序 交换类:冒泡排序.快速排序 选择类:简单选择排序.堆排序 归并类:二路归并排序 基数类:多关键字排序 九种算法的 ...
- 二路归并排序原理及JAVA实现
归并类排序 基本思想:首先将原始无序序列划分为两个子序列,然后分别对每个子序列递归地进行排序,最后再将有序子序列合并. 归并排序基于分治策略思想.前面提到的基于分治的快速排序重在"分&quo ...
- 二路归并排序及时间复杂度分析
序言 二路归并排序是一种效率极高的递归排序,将数组A化为有序数组时间复杂度为O(nlogn). 思想 二路归并排序分为拆分数组以及合并两个操作. 切分(自上而下)时间复杂度2*T(n/2) 每次从数组 ...
- 二路归并排序Python实现-III
二路归并排序Python实现-III 归并排序 是一种 效率比较高并且稳定的算法.时间复杂度 O(NLog(N)),空间复杂度 O(N). 归并排序(Merge Sort)是建立在归并操作上的一种有效 ...
- 数据结构——二路归并排序和基数排序
二路归并排序 算法原理 假设该数组为q,左边界为 l,右边界为 r,并设置临时数组tmp. 采用分治思想: 第一步:确定分界点: mid = l + r >>1. 第二步:递归划分左右两段 ...
- Sort List(二路归并排序)
题目链接:https://leetcode.com/problems/sort-list/description/ 题目要求:对链表进行排序,时间复杂度O(n),常数的空间复杂度 两种解法,本质上都是 ...
- 二路归并排序 Implemented With C++
文章目录 Definition Implementation Performance Definition 对于一个长度为 n n n 的表,我们可以把这张表看成是由 n n n 个长度为 1 1 1 ...
- 排序算法之——二路归并排序
排序算法之--二路归并排序 二路归并排序的思想: 一次排序过程,将已经各自有序的两个段的数据合并一个段,并且合并后依旧有序 开始,我们认为单个数据是有序的,一个数据就是一个段,一次排序之后,两个数据就 ...
最新文章
- 中国式姥姥上热搜感动无数人:有妈妈在,我才敢生娃
- 【机器视觉】 set_fuzzy_measure算子
- MindManager 报错:Click to restart mindjet player 解决方法
- java语音播报案例
- c语言指针和数组的联系
- sql server 利用 For Xml Path('') 多行数据拼接成一个字符串
- 云原生时代,需要什么样的数据库?
- Python3.7.2版本出现ModuleNotFoundError: No module named 'paramiko'解决办法
- 基于 cm-11 源码编译模拟器
- mysql给日期创建索引_如何在MySql的DATETIME字段的日期部分创建索引
- setFitView的zoom只是整数,导致缩放尺寸不合适的解决方案
- 优酷KUX1080转码工具如何将KUX视频转换成MP4格式
- Windows Server AppFabric分布式缓存研究
- FPS之游戏透视原理(一)
- Scala教程-详细全部
- 软件验证码显示服务器连接错误,验证码总是提示错误,验证码错误的解决办法 专家详解...
- embarrass的用法和搭配_embarrass_embarrass的意思和用法搭配
- 百度地图动态添加marker的图片显示问题
- form 表单提交后,使页面不跳转
- 从抓取豆瓣电影聊高性能爬虫思路(纯干货)