`
YuHuang.Neil
  • 浏览: 188820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Algorithm 03 : 合并两个有序数组

阅读更多
Question : Merge a sorted array of size n into another sorted array of size m+n.

问题:合并两个有序的数组,将一个长度为n的数组插入到指定的长度为m的数组中。


/**
  * @author YuHuang
  * @vision 2011-10-04
  * This program is only for algorithm training.
  *
  */

public class MergeArray {

        public static void doMerge(int[] aArray,int[] bArray,int lenOfaArray,int lenOfbArray) {
                int k=lenOfaArray+lenOfbArray;

                --lenOfaArray;
                --lenOfbArray;

                while(lenOfaArray>=0 && lenOfbArray>=0){
                        aArray[--k] = aArray[lenOfaArray]>bArray[lenOfbArray]?aArray[lenOfaArray--]:bArray[lenOfbArray--];
                }

                while(lenOfbArray>=0){
                        aArray[--k]=bArray[lenOfbArray--];
                }

        }

        public static void main(String[] args) {
                int[] aArray=new int[]{1,7,10,23,34,36,38,40,100,102,110,0,0,0,0,0,0};
                int[] bArray=new int[]{25,99,101,109,120,220};

                System.out.println("Before Merged - aArray : ");
                for(int elem : aArray){
                        System.out.print(elem+" ");
                }

                System.out.println();
                MergeArray.doMerge(aArray,bArray,11,6);

                System.out.println("After Merged - aArray : ");
                for(int elem : aArray){
                        System.out.print(elem+" ");
                }
                System.out.println();
        }
}




运行结果为:
Lab-Computer-0db2f6:JavaExercises labuser$ java MergeArray
Before Merged - aArray :
1 7 10 23 34 36 38 40 100 102 110 0 0 0 0 0 0
After Merged - aArray :
1 7 10 23 25 34 36 38 40 99 100 101 102 109 110 120 220

分享到:
评论

相关推荐

    C语言实现在数组A上有序合并数组B的方法

    分析:如果由前至后合并,复杂度将会是O(N2),这样的复杂度显然不是最优解,利用两个指针指向两个数组的尾部,从后往前遍历,这样的复杂度为O(n2) 由此可以写出下面的代码: #include #include <algorithm> #...

    关于数组的几道面试题1

    对于两个有序数组,可以采用双指针法,分别从头开始比较,找到相同的元素。 7. **求三个数组的共同元素**: 可以先找出两个数组的交集,再找这个交集与其他数组的交集。 8. **找出数组中唯一的重复元素**: ...

    leetcode数组下标大于间距-my-algorithm:我的算法

    合并两个有序链表 删除链表的节点 反转链表 合并两个排序的链表 19.删除链表的倒数第N个节点 链表中倒数第k个节点 面试题 02.05. 链表求和 55.跳跃游戏 45.跳跃游戏 II 21.买卖股票的最佳时机 122.买卖股票的最佳...

    javalruleetcode-Algorithm-Demo:算法的各类实现

    21:合并两个有序链表 24:两两交换链表中的节点 25:K个一组翻转链表 26:删除排序数组中的重复项 27:移除元素 30:串联所有单词的子串 32:最长有效括号 37:解数独 39:组合总和 40:组合总和II 41:缺失的第一...

    基本数据结构及算法习题参

    5. **合并两个有序表(Merge Sorted Arrays)**:给定两个已排序的数组,合并成一个有序数组。算法通过两个指针分别遍历两个数组,每次将较小的元素添加到结果数组,直到其中一个数组遍历完,再将另一个数组剩余部分...

    双指针算法基本原理和实践.pdf

    1. **寻找两个有序数组的中位数**:可以设置两个指针分别从两个数组的头部开始,根据比较结果调整指针移动,直至两者相遇。 2. **字符串匹配**:KMP算法中,通过next数组和主指针、辅助指针配合,避免了不必要的...

    runoob-algorithm-merge-sort.zip

    1. **算法原理**:归并排序将待排序的序列分为两个或更多的子序列,分别对子序列进行排序,然后将排好序的子序列合并成一个有序序列。这个过程不断递归进行,直到所有元素都在一个序列中且有序。 2. **分治策略**:...

    leetcode中文版-daily_algorithm::fire:算法进阶,由浅入深,欢迎加入一起共勉(Adailyalgorithm,Welcome

    两个有序链表的合并 : 删除链表倒数第 n 个结点 : 求链表的中间结点 栈 : 有效的括号 : 最小栈 : 基本的计算器 : 下一个更大元素(LeetCode 496) : 棒球比赛(LeetCode 682) : 比较含退格的字符串(LeetCode 844) 队列 ...

    青蛙过河leetcode-algorithm:刷题记录

    青蛙过河leetcode 切题 Clarification 明确题目要求 Possible solutions 所有可能解法 compare (time/space) optimal 最优 Coding Test cases 五遍刷题 ...合并两个有序数组 141 环形链表 189 旋转

    Algorithm-Bitonic-Sort:Algorithm :: Sort-使用Bitonic排序对数字进行排序这是Ken Batcher的Bitonic mergesort的Perl 5实现。

    然后通过一系列的交替升序和降序排列的操作,最终将两个部分合并成一个有序序列。这个过程可以被分解为两个主要步骤:Bitonic序列生成和Bitonic归并。 1. **Bitonic序列生成**:此步骤的目标是将输入序列转换为...

    算法-leetcode-剑指offer上的题很多

    - **二分搜索(Binary Search)**: 在有序数组中查找特定元素的搜索算法。 #### 数学基础 - **数学(Math)**: 研究数和数量、空间以及它们之间的关系。 - **质数(Prime)**: 只有1和它本身两个正因数的大于1的自然数。 ...

    C++中的几种排序算法

    归并排序的基本思想是将数组分成两个部分,分别排序,然后将两个部分合并成一个有序的数组。在C++中,归并排序可以实现如下: ```cpp void SortAlgorithm::mergeSort(){ sortSubVector(0, size - 1); } ``` 冒泡...

    sort_merge_java.rar_Table

    - `merge`方法:用于合并两个已经排序的子数组。 - `mergeSort`方法:这是一个递归函数,将整个数组划分并调用自身来排序子数组。 - 可能还会有主函数(`main`方法),用于测试和展示排序算法的功能。 归并排序的...

    算法学习笔记

    - Merge Sorted Array:合并两个已排序的数组。 - 3Sum Closest:找到和为给定值最接近的三个数的和。 - First Missing Positive:找出最小的正整数,它在数组中未出现。 - Kth Largest Element in an Array:在未...

    斯坦福公开课算法1 merge sort

    归并排序的核心思想是将数组分成两半,分别对这两半进行排序,然后合并两个有序数组得到最终结果。这个过程可以直观地表示为: 1. **分解**:将数组分成两个相等长度或接近相等长度的部分。 2. **递归排序**:递归...

    Algorithm-Javascript.zip

    - 二分查找:适用于有序数组,每次将查找区间缩小一半,提高查找效率。 - 哈希查找:通过哈希函数快速定位元素,查找速度极快,但需要额外的空间存储哈希表。 3. 图像处理算法: - RGB色彩空间转换:如将RGB转换...

    algorithm-zh

    - **定义**: 采用分而治之的策略,递归地将数组分成两半,然后合并两个有序数组。 - **时间复杂度**: O(n log n) #### 快速排序(Quick Sort) - **定义**: 通过一个划分操作将数组分为较小元素集和较大元素集,递归...

    基于Java的实例源码-近百种算法大全打包.zip

    - 归并排序:同样采用分治策略,将数组递归地分成两半,然后合并两个已排序的子数组。 - 堆排序:通过构建堆结构来实现排序,可以是最大堆或最小堆。 - 计数排序、桶排序和基数排序:非比较型排序,适用于特定...

    leetcode中文版-leetcode:解决了leetcode录制问题

    leetcode中文版 leetcode solved leetcode ...合并两个有序数组 Easy 100 相同的树 Easy 101 对称二叉树 Easy 102 二叉树的层序遍历 Medium 2020-05-12 103 二叉树的锯齿形层次遍历 Medium 2020-05-13 10

Global site tag (gtag.js) - Google Analytics