java 合并算法思想_Java实现合并两个有序序列算法示例
本文实例讲述了Java实现合并两个有序序列算法。分享给大家供大家参考,具体如下:
问题描述
输入:序列A,其中a0,其中b0
算法思想
创建一个长度为r的数组R,将A中的序列看作是两个有序序列
B=A
C=A分别从B和C中拿取一个数进行比较,将较小的放入R,如果这个数在B中,则继续取B中下一个最小的数;如果在C中,同样操作。所有数都在R中。
Ri=MIN(B)<=MIN(C)?MIN(B):MIN(C)
如果B或C没有更多的数可以获取,则将另一个序列的所有数填制R。
Ri=(MIN(B)MIN(C))
算法实现
/**
*
* @author Chuck
*
*/
public class Merge {
/**
* 合并两个有序序列
* @param A 待合并序列
* @param q 第二个序列开始数组下标
* @return 合并后的新数组
*/
public static int[] merge(int [] A,int q){
//创建数组
int n = A.length;
int [] R = new int[n];
int i = 0;
int j = q+1;
int k = 0;
//如果两个数组B 和 C中都有数据则选择更小的加入到R中并获取下一个
while(i<=q&&j<=n-1){
if(A[i]<=A[j]){
R[k]=A[i];
i++;
}else{
R[k]=A[j];
j++;
}
k++;
}
//如果B中有数据则把所有数据加入到R中
while(i<=q) R[k++] = A[i++];
//如果C中有数据则把所有数据加入到R中
while(j
return R;
}
public static void main(String [] args){
int [] A = {5,6,7,8,9,44,55,66,788,1,3,10,45,59,70,188};
int q = 8;
int [] R = Merge.merge(A, q);
for(int i=0;i
System.out.print(R[i] +" ");
}
}
}
算法时间
f(n)=q+1+r−q=r+1
这里的r是数组的输入规模,所以算法最坏情形运行时间为:
f(n)=O(n)
演示结果
1 3 5 6 7 8 9 10 44 45 55 59 66 70 188 788
希望本文所述对大家java程序设计有所帮助。
java 合并算法思想_Java实现合并两个有序序列算法示例相关推荐
- java合并两个有序链表_JS实现的合并两个有序链表算法示例
本文实例讲述了JS实现的合并两个有序链表算法.分享给大家供大家参考,具体如下: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1-> ...
- 两个序列的中位数c语言,小白在线求教 用归并排序实现查找两个有序序列的中位数...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 两个有序序列的中位数 (20分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,⋯,AN−1的中位数指A ...
- 7-234 两个有序序列的中位数 (25 分)
7-234 两个有序序列的中位数 (25 分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,⋯,AN−1的中位数指A(N−1)/2的值,即第 ...
- PTA5-53 两个有序序列的中位数
5-53 两个有序序列的中位数 (25分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A_0, A_1, \cdots, A_{N-1}A0,A1 ...
- python【力扣LeetCode算法题库】21- 合并两个有序链表
合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1-> ...
- 6 js 比较两个数组的差异_每天一道算法题(js)(3)——寻找两个有序数组的中位数...
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- python【力扣LeetCode算法题库】4- 寻找两个有序数组的中位数
寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...
- 判断给定的两个数是否是亲和数_动画演示LeetCode算法题:004-寻找两个有序数组的中位数...
题目: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nu ...
- 【详细解析】7-1 两个有序序列的中位数 (25 分)
题目描述 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,-,An-1的中位数指A(N1)/2的值,即第[(N+1)/2]个数(A0为第1个数). 输入 ...
最新文章
- L1-027 出租 (C++暴力解法)
- 虚拟机ubuntu搭建ftp服务器配置,虚拟机VMware15 Ubuntu18.04 搭建FTP服务器
- 万分之二用百分之怎么表示_万分之几用百分符号怎么表示 万分之五怎么写?0.5%...
- 在ArcGIS调坐标系引发的一系列问题
- android应用退出后广播无效,关闭应用程序后,保持广播接收器运行
- win7系统任务管理器如何强制关闭程序
- python中的装饰器
- 网站设计中程序员和美工的配合问题
- 疫情下的618:搜索热度已盖过双11,全民练习“直播带货”
- 分享一个蓝屏代码查询器
- 快速傅里叶变换(蝶形算法)
- libtorrent java_Libtorrent 之 NDK 编译
- github1s 油猴插件
- java 美元符号_使用单个美元符号“$”作为java类名称的任何风险?
- 百钱买百鸡问题,Python编程解决
- 神经网络及其在点云中的应用
- Android Gradle Composing builds 管理三方依赖
- MODIS影像获取NPP均值
- JavaScript中的二进制搜索算法
- 【密码学】1.1密码学发展史
热门文章
- linux下的asp.net服务器,Linux(Ubuntu)下搭建ASP.NET Core环境
- VUE-用到的样式左右(transform,translate,padding)
- Python操作Word文档的节属性和页眉/页脚
- Python+pandas你可能不知道的排序技巧
- Python通过WMI读取主板BIOS信息
- Python泛型函数与单分发器
- 使用Python判断文件是否为PE文件
- Python统计模块statistics用法精要
- linux定时刷新命令结果,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- android xml图片圆角矩形,使用Path自定义圆角图片