java 有序数组合并

有序数组合并,例如:

数组 A=[100, 89, 88, 67, 65, 34],

B=[120, 110, 103, 79, 66, 35, 20]

合并后的结果 result=[120, 110, 103, 100, 89, 88, 79, 67, 66, 65, 35, 34, 20]

程序:

import java.util.Arrays;

public class Test {

    public static void main(String[] args) {
        int[] a = { 100, 89, 88, 67, 65, 34 };
        int[] b = { 120, 110, 103, 79 };
        int a_len = a.length;
        int b_len = b.length;
        int[] result = new int[a_len + b_len];
        // i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组
        int i = 0;
        int j = 0;
        int k = 0;
        while (i < a_len && j < b_len) {
            if (a[i] >= b[i])
                result[k++] = a[i++];
            else
                result[k++] = b[j++];
        }

        // 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入
        while (i < a_len) {
            result[k++] = a[i++];
        }

        while (j < b_len) {
            result[k++] = b[j++];
        }

        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.toString(b));
        System.out.println(Arrays.toString(result));
    }
}

结果:

[100, 89, 88, 67, 65, 34]
[120, 110, 103, 79, 66, 35, 20]
[120, 110, 103, 100, 89, 88, 79, 67, 66, 65, 35, 34, 20]
时间: 2024-10-13 16:52:43

java 有序数组合并的相关文章

算法--两个有序数组合并

两个有序数组合并 关键点:从后往前进行比较,这样保证数组A有用的部分不会因为在合并的过程中覆盖掉 第15节 有序数组合并练习题 有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B.请编写一个方法,将B合并入A并排序. 给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组. Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class Merge {

两个有序数组合并成一个有序数组

两个有序数组合并成一个有序数组 1. 题目描述 数组a是有序的,数组b也是有序的,如何高效地合并它们成一个数组,并且新数组也是有序的? 2. 从后往前合并 这道题目是师兄电面阿里的时候,问到的一道题目.现在我们来说一下解法~ 假设数组a足够长,可以在数组a上合并二者.我们的解法基本思想就是从后往前合并数组. 每次合并的时候,都要比较a和b当前数组的大小,取较大的值后移,注意一定要是后移! 为什么从后往前呢?其实就是为了方便后移,因为较大的一定是在后面的. 程序如下: #include<iostr

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

突然想到了这个算法,记得以前看过,但是没写,怕自己会写不出这个算法,于是就把它用JAVA写出来,呵呵. 思想:先依次比较两个数组,按照小的就传入新的数组.当这次比较完之后可能有一个数组的长度很长,留下一些数组,然后在新数组的末尾插入即可. 代码: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 class ArraySort{ //两个有序数组

两个有序数组合并算法

有两个有序数组A和B,如果把A和B合并起来到C中,具体算法如下: public static int [] MergeArray(int[] ArrayLeft, int[] ArrayRight)// { int length = ArrayLeft.Length + ArrayRight.Length; int[] ArrayMerge = new int[length]; int i = 0; int j = 0; while (i < ArrayLeft.Length &&

算法 - 两个有序数组合并成一个有序数组

//两个有序数组的合并函数 public static int[] MergeList(int a[],int b[]) { int result[]; if(checkSort(a) && checkSort(b)) //检查传入的数组是否是有序的 { result = new int[a.length+b.length]; int i=0,j=0,k=0; //i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组 while(i<a.length &&

有序数组合并求第K大问题

题目描述 Description 给出两个有序数组A和B(从小到大有序),合并两个有序数组后新数组c也有序,询问c数组中第k大的数 假设不计入输入输出复杂度,你能否给出一个O(logN)的方法? 输入描述 Input Description 第一行输入三个整数n.m和k 第二行输入n个用空格隔开的整数表示数组A 第三行输入m个用空格隔开的整数表示数组B 输入保证A和B数组非递减 输出描述 Output Description 合并两个数组之后的第k大的数 样例输入 Sample Input 2

有序数组合并

题目描述 Description 合并两个有序数组A和B,使得结果依然有序. 进阶:合并两个有序数组A和B,假设A有n个数,B有m个数,A数组后面还有m个空余空间,需要将结果保存在A中. 请使用O(n)的算法完成 输入描述 Input Description 第一行输入两个整数n和m 第二行输入n个用空格隔开的整数表示数组A 第三行输入m个用空格隔开的整数表示数组B 输入保证A和B数组非递减 输出描述 Output Description 输出一行一共n+m个空格隔开的整数,即合并后的结果 样例

Java有序数组的实现

package 有序数组; public class OrdArray { private long[]array; private int nElems; //初始化 public OrdArray(int max){ array = new long[max]; nElems = 0; } //返回数组中的大小 public int size(){ return nElems; } //查找的方法的实现 public int find(long searchKey){ int lowerBo

算法有序数组合并---在空间足够的情况下,进行O(n)的合并 并且移动次数最小

最近看一本书上有一个面试题,  原题目是 有两个递增数组 A1 A2,   A1的内存空间足够长, 现在要求合并 A2到A1,并且要求移动次数最小 ,面试的时候 我们尽量要以  最高效的方式完成 ,下面是此题  O(n)解法. ///合并 void MergeArray(int *arrA1,int *arrA2,int nLenA1,int nLenA2) { if(!arrA1||!arrA2) return ; //合并后的尾部 int *pBehandA1=(arrA1+nLenA1-1