Java实现合并两个有序序列算法示例

发布时间 - 2026-01-11 03:16:39    点击率:

本文实例讲述了Java实现合并两个有序序列算法。分享给大家供大家参考,具体如下:

问题描述

输入:序列A<a0,a1,a2,...aq,aq+1,aq+2,...,ar>,其中a0<a1<...<aq,aq+1<aq+2<...<ar
输出:序列B<b0,b1,...,br>,其中b0<b1<...<br

算法思想

创建一个长度为r的数组R,将A中的序列看作是两个有序序列
B=A<a0,a1,a2,...,aq>
C=A<aq+1,aq+2,...,ar>
分别从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<n-1) R[k++] = A[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<R.length;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操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


# Java  # 合并  # 有序序列  # 算法  # Java实现把两个数组合并为一个的方法总结  # java 两个数组合并的几种方法  # 合并有序数组的实现(java与C语言)  # 归并算法之有序数组合并算法实现  # java实现把两个有序数组合并到一个数组的实例  # 中有  # 则把  # 操作技巧  # 相关内容  # 都在  # 感兴趣  # 数据结构  # 第二个  # 给大家  # 时间为  # 较小  # 更多关于  # 中都  # 取下  # 所述  # 并获  # 创建一个  # 程序设计  # 更小  # 则将 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel如何使用Service Container和依赖注入?(代码示例)  如何在万网利用已有域名快速建站?  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  如何用PHP快速搭建CMS系统?  轻松掌握MySQL函数中的last_insert_id()  网站制作壁纸教程视频,电脑壁纸网站?  再谈Python中的字符串与字符编码(推荐)  手机网站制作与建设方案,手机网站如何建设?  Python图片处理进阶教程_Pillow滤镜与图像增强  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何在阿里云通过域名搭建网站?  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel如何处理表单验证?(Requests代码示例)  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何用VPS主机快速搭建个人网站?  如何在Tomcat中配置并部署网站项目?  iOS中将个别页面强制横屏其他页面竖屏  千库网官网入口推荐 千库网设计创意平台入口  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  如何快速完成中国万网建站详细流程?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  教你用AI将一段旋律扩展成一首完整的曲子  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  网站图片在线制作软件,怎么在图片上做链接?  魔方云NAT建站如何实现端口转发?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Python结构化数据采集_字段抽取解析【教程】  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  微信公众帐号开发教程之图文消息全攻略  详解Android——蓝牙技术 带你实现终端间数据传输  三星、SK海力士获美批准:可向中国出口芯片制造设备  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  如何快速搭建高效WAP手机网站吸引移动用户?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?