精华内容
下载资源
问答
  • 有序数组合并

    2019-10-22 17:51:05
    // 有序数组合并 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String str1[] = sc.nextLine().split(" "); String str2[] = sc....
    // 有序数组合并
    import java.util.*;
    public class Main{
    	public static void main(String[] args){
    		Scanner sc = new Scanner(System.in);
    		String str1[] = sc.nextLine().split(" ");
    		String str2[] = sc.nextLine().split(" ");
    		int num1[] = new int[str1.length];
    		int num2[] = new int[str2.length];
    		for(int i=0;i<str1.length;i++){
    			num1[i] = Integer.valueOf(str1[i]);
    		}
    		for(int i=0;i<str2.length;i++){
    			num2[i] = Integer.valueOf(str2[i]);
    		}
    		int num[] = zh(num1,num2);
    		for(int i:num){
    			System.out.print(i+" ");
    		}
    		System.out.println();
    		System.out.println(isOrdered(num));
    	}
    	public static int[] zh(int num1[],int num2[]){     // 有序数组合并
    		int result[] = new int[num1.length+num2.length];
    		int i=0,j=0,k=0;
    		while(i<num1.length && j<num2.length){
    			if(num1[i]<=num2[j]){
    				result[k] = num1[i];
    				i++;k++;
    			}else{
    				result[k] = num2[j];
    				j++;k++;
    			}
    		}
    		while(i<num1.length && j>=num2.length){
    			result[k++] = num1[i++];
    		}
    		while(j<num2.length && i>=num1.length){
    			result[k++] = num2[j++];
    		}
    		return result;
    	}
    	public static boolean isOrdered(int num[]){
    		boolean flag = true;
    		for(int i=1;i<num.length;i++){
    			if(num[i]<num[i-1]){
    				flag = false;
    			}
    		}
    		return flag;
    	}
    }在这里插入代码片
    
    展开全文
  • 归并算法之有序数组合并算法实现 一个简单的有序数组合并算法:写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组。实现相当简单,创建一个长度为这两个长度之和的数组,然后分别用三个指针指向这三个...
  • 排序13:有序数组合并

    题目:有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。

    思路:已知两个数组都是有序的,最终需要将B数组合并到A数组中来,注意理解,数组不同于集合,没有容量这个概念,只有长度,即数组中的长度必须是明确的,且里面必须填充数据,不能仅仅占用、保留空间而不存放数据,所以题目中采取的方式是在A数组的后面缓冲空间填充0,而int  n,intm指的是数组的真实长度,即非0元素的数目,此时A.length与n;B.length与m是不相等的n,m只是A,B的前面一个部分而已。本题的解决策略很简单,对于两个数组的真实值部分,即使用2个指针从i=n-1和i=m-1开始从后向前遍历数组A,B,比较得到较大的值将其放到i=m+n-1的位置;一直向前遍历数组A,B,直到如果B数组遍历完成,那么就已经合并完成了,直接返回A即可;如果A数组先遍历完成,那么不需要比较了,直接将B数组中的剩余元素放入到A数组中即可。

    import java.util.*;
    //已知数组A,B有序将其合并;注意着了A.length不等于n
    public class Merge {
        public int[] mergeAB(int[] A, int[] B, int n, int m) {
            //特殊输入
            if(B==null||B.length<=0) return A;
            //从后向前遍历数组A,B,将较大值放入到数组A中
            int p1=n-1;
            int p2=m-1;
            //较大值从A数组的m+n-1的位置开始向前存放
            int p=m+n-1;
            while(p2>=0&&p1>=0){
            //此时数组B没有遍历完成,将较大值放入到数组A的末尾
                A[p--]=(A[p1]>B[p2]?A[p1--]:B[p2--]);
            }
            //如果B数组遍历完成,那么A中的剩余元素不用动了,直接返回即可
            if(p2<0) return A;
            //如果A数组遍历完成,那么将B中的元素不用比较直接复制到A数组中即可
            if(p1<0){
                while(p2>=0){
                    A[p--]=B[p2--];
                }
            }
            //此时A,B数组都完成合并,记得返回结果
            return A;
        }
    }


    展开全文
  • 不同的有序数组合并

    2020-10-26 15:34:25
    //有序数组合并 - (void)orderListMerge { //OC语法(NSArray *)结构数组內元素只能为实例对象值,元素不支持基本数据类型 // NSArray *list = @[@1,@2,@3]; //C语法体系下结构数组內元素可以为实例对象值也可以为...
    //有序数组合并
    - (void)orderListMerge {
        //OC语法(NSArray *)结构数组內元素只能为实例对象值,元素不支持基本数据类型
    //    NSArray *list = @[@1,@2,@3];
        //C语法体系下结构数组內元素可以为实例对象值也可以为基本数据类型,元素支持基本数据类型
        int aLen = 5,bLen = 9;
        int a[] = {1,4,6,7,9};
        int b[] = {2,3,5,6,8,9,10,11,12};
        [self printList:a length:aLen];
        [self printList:b length:bLen];
        int result[14];
        int p = 0,q = 0,i = 0;//p为a数组下标、q为b数组下标,i为合并数组下标
        //任意子数组都没有越过safe边界则进行遍历
        //**子数组本身都有序**//子数组本身带有隐藏的变化逻辑关系
        while (p < aLen&&q < bLen) {
            //将选择元素中较小值放入结果数组的器皿坑位中(实现由小到大排序)
            if (a[p] < b[q]) {
                result[i++] = a[p++];
            } else {
                result[i++] = b[q++];
            }
        }
        //某个数组开始越界临界(另外一个存在元素剩余)
        while (++p < aLen) {//a数组剩余(a数组剩余部分拼接到结果数组后面坑位)
            result[i++] = a[p];
        }
        while (q < bLen) {//b数组剩余(b数组剩余部分拼接到结果数组后面坑位)
            result[i++] = b[q++];
        }
    
        [self printList:result length:aLen + bLen];
    
    }
    
    - (void)printList:(int [])list length:(int)length {
        for (int i = 0; i< length; i++) {
            printf("%d,",list[i]);
        }
        printf("\n");
    }
    
    展开全文
  • java 有序数组合并

    2017-07-29 21:51:00
    有序数组合并,例如: 数组 A=[100, 89, 88, 67, 65, 34], B=[120, 110, 103, 79] 合并后的结果 result=[120, 110, 103, 79, 100, 89, 88, 67, 65, 34] 程序: import java.util.Arrays; public class ...

    有序数组合并,例如:

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

          B=[120, 110, 103, 79]

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

    程序:

    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]
    [120, 110, 103, 79, 100, 89, 88, 67, 65, 34]

    转载于:https://www.cnblogs.com/ouyxy/p/7257656.html

    展开全文
  • 今天小编就为大家分享一篇java实现把两个有序数组合并到一个数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 两个有序数组合并

    2018-12-03 10:48:22
    1124: 两个有序数组合并 时间限制: 1 Sec 内存限制: 128 MB 提交: 8452 解决: 3117 [提交] [状态] [讨论版] [命题人:admin] 题目描述 已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,...
  • 两个有序数组合并后求其中位数 给定两个有序数组 a[n], b[m].求其合并后的有序数组的中位数。 思路一 :  这个思路也是我第一时间想到的,但是效率并不好。时间复杂度O(n+m).相信大家也能知道,即主动合并两个两...
  • 例题 :查找两个有序数组合并后的中位数 【题目】 两个有序数组查找合并之后的中位数。给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组合在一起之后的中位数,并且要求算法的...
  • 1124: 两个有序数组合并 时间限制: 1 Sec 内存限制: 128 MB 提交: 12599 解决: 4941 [状态] [讨论版] [提交] [命题人:admin] 题目描述 已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b...
  • 两个有序数组合并成有序数组

    千次阅读 2017-02-07 16:53:51
    昨天面试遇到了这样一个问题,怎样把两个有序数组合并成有序数组呢?我傻傻的是这么回答的:创建一个可变数组,把两个数组放入可变数组之后再进行排序。想想考官当时都会觉得搞笑,考官当时心里应该是这么想的,你的...
  • 归并算法之有序数组合并算法实现 一个简单的有序数组合并算法:写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组。实现相当简单,创建一个长度为这两个长度之和的数组,然后分别用三个指针指向这三个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 963
精华内容 385
关键字:

有序数组合并