本文实例讲述了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实现合并两个有序序列算法示例相关推荐

  1. java合并两个有序链表_JS实现的合并两个有序链表算法示例

    本文实例讲述了JS实现的合并两个有序链表算法.分享给大家供大家参考,具体如下: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1-> ...

  2. 两个序列的中位数c语言,小白在线求教 用归并排序实现查找两个有序序列的中位数...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 两个有序序列的中位数 (20分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,⋯,AN−1的中位数指A ...

  3. 7-234 两个有序序列的中位数 (25 分)

    7-234 两个有序序列的中位数 (25 分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0​,A1​,⋯,AN−1​的中位数指A(N−1)/2​的值,即第 ...

  4. PTA5-53 两个有序序列的中位数

    5-53 两个有序序列的中位数   (25分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A_0, A_1, \cdots, A_{N-1}A​0​​,A​1 ...

  5. python【力扣LeetCode算法题库】21- 合并两个有序链表

    合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1-> ...

  6. 6 js 比较两个数组的差异_每天一道算法题(js)(3)——寻找两个有序数组的中位数...

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...

  7. python【力扣LeetCode算法题库】4- 寻找两个有序数组的中位数

    寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...

  8. 判断给定的两个数是否是亲和数_动画演示LeetCode算法题:004-寻找两个有序数组的中位数...

    题目: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nu ...

  9. 【详细解析】7-1 两个有序序列的中位数 (25 分)

    题目描述 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,-,An-1的中位数指A(N1)/2的值,即第[(N+1)/2]个数(A0为第1个数). 输入 ...

最新文章

  1. L1-027 出租 (C++暴力解法)
  2. 虚拟机ubuntu搭建ftp服务器配置,虚拟机VMware15 Ubuntu18.04 搭建FTP服务器
  3. 万分之二用百分之怎么表示_万分之几用百分符号怎么表示 万分之五怎么写?0.5%...
  4. 在ArcGIS调坐标系引发的一系列问题
  5. android应用退出后广播无效,关闭应用程序后,保持广播接收器运行
  6. win7系统任务管理器如何强制关闭程序
  7. python中的装饰器
  8. 网站设计中程序员和美工的配合问题
  9. 疫情下的618:搜索热度已盖过双11,全民练习“直播带货”
  10. 分享一个蓝屏代码查询器
  11. 快速傅里叶变换(蝶形算法)
  12. libtorrent java_Libtorrent 之 NDK 编译
  13. github1s 油猴插件
  14. java 美元符号_使用单个美元符号“$”作为java类名称的任何风险?
  15. 百钱买百鸡问题,Python编程解决
  16. 神经网络及其在点云中的应用
  17. Android Gradle Composing builds 管理三方依赖
  18. MODIS影像获取NPP均值
  19. JavaScript中的二进制搜索算法
  20. 【密码学】1.1密码学发展史

热门文章

  1. linux下的asp.net服务器,Linux(Ubuntu)下搭建ASP.NET Core环境
  2. VUE-用到的样式左右(transform,translate,padding)
  3. Python操作Word文档的节属性和页眉/页脚
  4. Python+pandas你可能不知道的排序技巧
  5. Python通过WMI读取主板BIOS信息
  6. Python泛型函数与单分发器
  7. 使用Python判断文件是否为PE文件
  8. Python统计模块statistics用法精要
  9. linux定时刷新命令结果,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  10. android xml图片圆角矩形,使用Path自定义圆角图片