c++合并两个序列函数merge()和inplace_merge()
大家在写归并排序时是不是觉得合并两个序列有点麻烦,有快速的方法吗?
我们全部函数自己写,比如:
#include<bits/stdc++.h>
using namespace std;
#define MAX_SIZE 50000
int mydata[MAX_SIZE+];
int mysize;//向量元素实际个数void my_merge(int lo,int mi,int hi)//合并两个序列
{
//A分为b,c左右两个数组
int *A=mydata+lo;//合并后的向量
int *C=mydata+mi;
int lb=mi-lo,lc=hi-mi; //b,c数组的长度
int *B=new int[lb];//创建B数组=A[0-lb]
//int *B=(int*)malloc(sizeof(int)*lb);
for(int i=;i<lb;i++) B[i]=A[i]; //复制
int j=,k=;//b,c
for(int i=;j<lb;){
if(j<lb&&(B[j]<=C[k]|| k>=lc/*c空了*/ )) A[i++]=B[j++];
if(k<lc&&(C[k]<B[j])) A[i++]=C[k++];
}//时间< O(n)
delete [] B;
//free(B);
}//一共logn层
void mergeSort(int lo,int hi)//归并排序
{
int mi=(lo+hi)>>;
if(lo+>hi) return;
mergeSort(lo,mi);
mergeSort(mi,hi);//分治
my_merge(lo,mi,hi);//合并
}//归并排序总的时间复杂度
int main(void)
{
int n;
scanf("%d",&n);
mysize=n;
for(int i=;i<n;i++)
scanf("%d",&mydata[i]);
mergeSort(,mysize);
return ;
}
我们首先会想到C++algorithm里的merge()函数,merge函数可以把两个有序的序列变成一个新的有序序列(注意是新的),这里是设计三个序列,并不能在原序列上进行操作,可是归并排序要在原序列进行操作。
那么还有一个函数似乎可以帮到我们,inplace_merge()。inplace_merge()有三个必须参数,默认合并后排序是升序的,第一个参数是一个序列的起始位置,第二个是该序列的切分位置,第三个参数是该序列区间的结束位置。
比如:
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t,n;
int z[10]={5,6,7,8,9,0,1,2,3,4};
int b[15];
inplace_merge(z,z+5,z+10);
for(int i=0;i<10;i++)
printf("%d ",z[i]);
return 0;
}
这两个函数详细解析请点击(地址为http://c.biancheng.net/view/568.html)
代码实现请看:
https://www.cnblogs.com/cchun/archive/2012/05/26/2519394.html
c++合并两个序列函数merge()和inplace_merge()的更多相关文章
- 合并两个sorted ranges(merge和inplace_merge)
merge //版本一:用operator <比较元素 template <class InputerIterator1,class InputerIterator2,class Outp ...
- LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)
21. 合并两个有序链表 21. Merge Two Sorted Lists 题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. LeetCode ...
- 高效合并两个有序数组(Merge Sorted Array)
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: Y ...
- [Swift]LeetCode21. 合并两个有序链表 | Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- [Swift]LeetCode88. 合并两个有序数组 | Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...
- LeetCode 21:合并两个有序链表 Merge Two Sorted Lists
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. Merge two sorted linked lists and return it as a new ...
- ADO:DataSet合并两张表( ds.Merge(ds1))
原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- LeetCode 23. 合并K个排序链表(Merge Two Sorted Lists)
23. 合并K个排序链表 23. Merge k Sorted Lists 题目描述 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. LeetCode23. Merge k S ...
- Js $.merge() 函数(合并两个数组内容到第一个数组)
定义和用法 $.merge() 函数用于合并两个数组内容到第一个数组. 语法 $.merge( first, second ) 参数 描述 first Array类型 第一个用于合并的数组,合并后 ...
随机推荐
- C++中const限定符
const基础 C++中的const,用于定义一个常量,这个常量的值不能被修改.因为const对象一旦创建就不能修改,所以const对象必须初始化.const常量特征仅仅在执行改变其本身的操作时才会发 ...
- Visual Studio Code (vscode) 配置 C / C++ 环境
Visual Studio Code (vscode) 配置 C / C++ 环境 昨天突发奇想,想使用vscode配置C++环境,因为不想下载 Dev OR codeblock,然后借助了很多网上教 ...
- js中常用的获得日期对象的方法
// 默认是当前时区的日期和时间 var date = new Date(); // 获取特定日期和时间的日期对象,需要传递毫秒数,不过可以传递规范日期格式字符串来代替 // 一些常见的日期格式 // ...
- JS实现简单的图片透明度循环变化(渐变)
找了好多,都是由100到0就结束了,到头来自己魔改,以下就是源码. div中加入img,js添加函数,完事(调用),取名后面加个1是为了避免冲突 <!DOCTYPE HTML> <h ...
- DevExpress中GridColumnCollection实现父子表数据绑定
绑定数据: 父表: DataTable _parent = _dvFlt.ToTable().Copy(); 子表: DataTable _child = _dvLog.ToTable().Copy( ...
- 百度搜索常用api
http://www.baidu.com/s?wd=关键字 wd(Keyword):查询的关键词:http://www.baidu.com/s?wd=关键字&cl=3 cl(Class):搜索 ...
- 关于Html中的title属性内容换行,以及Bootstrap的tooltip的使用
1.HTML中的title属性的内容换行: 鼠标经过悬停于对象时提示内容(title属性内容)换行排版方法,html title 换行方法总结. html的title属性默认是显示一行的.如何换行呢? ...
- Java调用Http/Https接口(5)--HttpAsyncClient调用Http/Https接口
HttpAsyncClient是HttpClient的异步版本,提供异步调用的api.文中所使用到的软件版本:Java 1.8.0_191.HttpClient 4.1.4. 1.服务端 参见Java ...
- 使用jmeter对dubbo接口进行性能测试教程及常见问题处理
一. 测试脚本编写 脚本可参考git项目: https://github.com/aland-1415/dubbo-interface-test.git 1. pom依赖 (注意添加的jmeter ...
- MySQL路线
一 数据库简介与安装 二 库操作 三 表操作 四 数据操作 五 索引原理与慢查询优化 六 数据备份与慢查询优化 七 视图.触发器.事务.存储过程.函数