要求:
不使用for循环
不使用API方法进行数据迁移 :
System.arraycopy(int[] a,…);
Arrays.copyOf(int[] a,…);

一、两个有序数组合并为一个有序数组

方案1

import java.util.Arrays;public class ArraySortTest {public static void main(String[] args) {//方法1,普通for循环+工具类Arrays.sort(arraySort)//给定2个有序数组,合并成一个有序数组int[] a = {2,5,7,8,17};int[] b = {1,3,6,9,13,18};//创建合并之后的数组int[] arraySort = new int[a.length+a.length];//先将a放入arrayfor (int i = 0; i < a.length; i++) {arraySort[i] = a[i];}//再将b放入arrayfor (int j = 0; j < b.length; j++) {arraySort[a.length+j-1] = b[j];}//最后对array进行排序Arrays.sort(arraySort);for (int i : arraySort ) {System.out.print(i+",");} }
}

方案2

import java.util.Arrays;public class ArraySortTest {public static void main(String[] args) {//方法2int[] a = {2,5,7,8,17};int[] b = {1,3,6,9,13,18};//定义三个起始变量,分别对应数组a、b、arraySort的下标初始值int i= 0;int j= 0;int x= 0;int[] arraySort = new int[a.length+b.length];//将小的先放入arraySort while(i < a.length && j < b.length){if(a[i] < b[j]){arraySort[x] = a[i];x++;i++;}else{arraySort[x] = b[j];j++;x++;}}//a先迁移完毕,剩下的b直接迁移就好了if(i >= a.length){while (j < b.length){arraySort[x] = b[j];j++;x++;}}//b先迁移完毕,剩下的a直接迁移就好了if(j >= b.length){while (i < a.length){arraySort[x] = a[i];i++;x++;}}//打印数组arrayfor (int ast : arraySort ) {System.out.print(ast+",");}}
}

执行结果

二、多个有序数组合并为一个有序数组

方案1

import java.util.Arrays;public class MoreArraySortTest {public static void main(String[] args) {int[] arr1 = {1,3,5,6,11};int[] arr2 = {1,2,7,12};int[] arr3 = {4,6,19,11};int[] arr4 = {8,89};//两两合并排序,最后再对前面的排序进行合并int[] merge1 = merge(arr1,arr2);int[] merge2 = merge(arr3,arr4);int[] merge = merge(merge1, merge2);System.out.println(Arrays.toString(merge));}public static int[] merge(int[] a, int[] b){//定义三个起始变量,分别对应数组a、b、arraySort的下标初始值int i= 0;int j= 0;int x= 0;int[] arraySort = new int[a.length+b.length];while(i < a.length && j < b.length){if(a[i] < b[j]){arraySort[x] = a[i];x++;i++;}else{arraySort[x] = b[j];j++;x++;}}//a先迁移完毕,剩下的b直接迁移就好了if(i >= a.length){while (j < b.length){arraySort[x] = b[j];j++;x++;}}//b先迁移完毕,剩下的a直接迁移就好了if(j >= b.length){while (i < a.length){arraySort[x] = a[i];i++;x++;}}return arraySort;}
}

执行结果

方案2

public class KSortedArray {public static void main(String[] args){int[] a = {1,3,5,7,9};int[] b = {2,5,7,17,110};int[] c = {0,1,6,8,9,11};int[] d = {0,4,7,22};int[] result = sort(a,b,c,d);for (int r:result) {System.out.print(r+",");}}/*** 多数组排序整合* @param data* @return*/private static int[] sort(int[]...data) {if(data == null)return null;int[] result = data[0];if(data.length == 1)return result;for (int i=1 ; i<data.length ; i++) {result = sort(result,data[i]);}return result;}/*** 两个已排序数组合并处理* @param a* @param b* @return*/private static int[] sort(int[] a,int[] b){// 结果返回数组int result[] = new int[a.length+b.length];// 结果返回数组下标int resultCount = -1;// 最值小的数组循环标记int minCount = 0;int[] maxValue = a[a.length-1] >= b[b.length-1] ? a : b;int[] minValue = a[a.length-1] < b[b.length-1] ? a : b;for(int i = 0 ; i < maxValue.length ; i++){resultCount++;if(minCount < minValue.length){// 因为数组是排序的,所以已比较的数据minValue[minCount]不会重复比较if(maxValue[i] >= minValue[minCount]){result[resultCount] = minValue[minCount];i--;minCount++;}else{// 大数组拥有最小值,minCount需要再次比较,所以不需要+1result[resultCount] = maxValue[i];}}else{// 已不存在小数组比较,此时大数组获取最小值result[resultCount] = maxValue[i];}}return result;}
}

执行结果

两个或多个有序数组合并为一个有序数组相关推荐

  1. c语言将两个有序表合并为一个有序表,c语言实现两个有序链表的合并(代码示例)...

    本篇文章通过代码示例介绍一下使用c语言合并两个有序链表的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 教程推荐:<c语言教程视频> c语言实现两个有序链表的合并 ...

  2. 两种思路将Python中两个有序数组合并为一个有序数组

    第一种思路: 把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性. 第二种思路: 循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中 ...

  3. c语言整形数组相加,[c语言]将两个整形升序数组合并为一个升序数组

    可能大多数人首先想到的是将两个数组合并,然后将合并后的数组排序输出.但是题目要求合并完即为一个升序数组,这样做不合题意.可以利用已知条件(两数组A.B均为升序),循环在每个数组中均选取一个元素来对比, ...

  4. 有序数组合并及等长数组对位穿插

    将两个本身有序的数组合并为一个新的数组的方法 const arr1 = [11,15,18,23,26],arr2 = [11,19,21,25,27];let mergeTwoArr = (arr1 ...

  5. 将两个有序链表合并为一个链表任然有序C语言

    将两个有序链表合并为一个链表任然有序,两个链表都是从大到小或者从小到大. 方法: 1.将两个链表连起来,对所有元素进行排序. 2.因为两个链表的长度可能不同,则将两链表相同长度的一部分进行排序,将较长 ...

  6. 链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。

    链表面试题3:将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成 的. 首先我们的思想是将得一个链表和第二个链表的每个结点进行比较,谁小谁就插入到新链表的最后. ...

  7. Java实现把两个数组合并为一个的方法总结

    本文实例讲述了Java实现把两个数组合并为一个的方法.分享给大家供大家参考,具体如下: 在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁, ...

  8. 【数据结构笔记】将两个递增的有序链表合并为一个递增的有序链表

    将两个递增的有序链表合并为一个递增的有序链表.要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间.表中不允许有重复的数据. [题目分析] 合并后的新表用头指针Lc指向,pa和pb分别 ...

  9. 两个有序链表合并成一个有序的单链表

    将这两个有序链表合并成一个有序的单链表 要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间 表中允许有重复数据 算法描述 (1)定义一个合并后的指针pc指向La表的头结点.由于要求不占 ...

最新文章

  1. 通过响应式web设计,使本站支持手机浏览
  2. 用韩信三技能,讲清楚一致性哈希
  3. find查找多个文件
  4. 单片机断电后不保存程序_51单片机运行过程
  5. maven中pom.xml中的scope讲解
  6. 如何将本地代码推送至远程仓库_命令简化版本
  7. SOFA RPC 详细介绍
  8. redis数据类型之set入门
  9. 【数学建模】基于matlab三维数据可视化(华为杯)【含Matlab源码 139期】
  10. Linux入门——文本处理三剑客之gnu awk
  11. kindeditor在线HTML编辑器
  12. linux下hg无法运行_linux下Mercurial Hg的配置方法
  13. mac安装旺旺启动台找不到_如何正确安装和卸载Mac软件?
  14. 数据库实验四 视图实验
  15. 原型工具XSTAR与AXURE对比
  16. 共享单车项目(一)--项目简介
  17. android 自动发短信的代码,Android点击按钮时自动发送短信
  18. MFC编辑框控件绑定变量出现神奇bug
  19. 中科创达C++ 二面(hr面,30min,offer)
  20. 1万块钱存入银行,10年后,连本带利能取多少钱?

热门文章

  1. Soft-Clipping Mish激活函数
  2. android 5.0小米1刷机包,小米1刷机包 V5稳定版V1.2 流畅纯净 精简省电 默认开启未知来源 Android4.1.2...
  3. AVI 文件格式分析
  4. ZZULIOJ:1099: 角谷猜想(多实例测试)
  5. idead 1099端口被占用 解决
  6. 蜘蛛大战之 站点LOGO(SEO)
  7. Lenovo Y50 (1080P) 安装 黑苹果 hackintosh macOS High Sierra 10.13.5 (17F77) 不适合双系统
  8. 【Ceph】Ceph错误记录 Ceph 运维手册
  9. 数据库原理与设计P163习题9答案
  10. 《人人都是首席质量官》vs “人人都是产品经理” 及心得