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


两个有序数组合并

关键点:从后往前进行比较,这样保证数组A有用的部分不会因为在合并的过程中覆盖掉

第15节 有序数组合并练习题

有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。

给定两个有序int数组AB,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。

Java (javac 1.7)

代码自动补全

1

import java.util.*;

2


3

public class Merge {

4

     public int[] mergeAB(int[] A, int[] B, int n, int m) {

5

        //标记A数组和B数组遍历位置的下标

6

        int indexA = n - 1;

7

        int indexB = m - 1;

8


9

        //遍历时标记元素放的位置

10

        int index = n - 1 + m;

11

        /**

12

         * 每一轮遍历,比较的是此时数组A和数组B对应索引所指的元素,挑出最大的放到A数组最后index的位置

13

         */

14

        while(indexA >= 0 && indexB >= 0){

15

            if(A[indexA] > B[indexB]){

16

                A[index] = A[indexA];

17

                indexA--;

18

            }

19

            else{

20

                A[index] = B[indexB];

21

                indexB--;

22

            }

23

            index--;

24

        }

25

        /**

26

         * 查看B数组中的元素是否遍历完成,没有遍历完成此时遍历剩余的元素到A中

27

         * 

28

         * A:                       4   5   7   10

29

         * B:1   2

30

         */

31

        while(indexB>=0){

32

            A[indexB] = B[indexB];

33

            indexB--;

34

        }

35

        return A;

36

    }

37

}

您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

运行

时间: 2024-10-10 18:57:48

算法--两个有序数组合并的相关文章

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

//两个有序数组的合并函数 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 &&

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

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

两个有序数组合并算法

有两个有序数组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 &&

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

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

Python版将两个有序数组合并为一个有序数组

第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性.(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0.然后再把不为空的老数组中剩下的部分加到新数组的结尾.(好) 第二种思路的排序算法与测试代码如下: def merge_sort(a, b): ret = [] while len(a)>0 and len(b)>0: if a[0] <= b[0]: ret.appen

88. Merge Sorted Array【leetcode】算法,java将两个有序数组合并到一个数组中

88. Merge Sorted Array Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The n

归并之将两个有序数组合并(已測试)

#include<stdio.h> #include<stdlib.h> //归并作用是将两个序列合并 L = 左边起始位置,R = 右边起始位置 RightEnd = 右边终点位置 void Merge(int A[],int TmpA[],int L,int R,int RightEnd) { int LeftEnd = R -1; //左边终点位置 左右两列挨着 int Tmp = L; //存放结果初始位置 int NumElements = RightEnd - L +

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

原文地址:https://www.cnblogs.com/cjsblog/p/10015422.html

小算法:合并两个有序数组,合并之后仍然有序

1 /** 2 * 合并两个有序数组,合并后仍然有序 3 * @param a 要合并的数组A 4 * @param b 要合并的数组B 5 * @param c 合并后的数组C 6 */ 7 public static void merge(int a[] ,int b[],int c[]){ 8 int lengthA = a.length; 9 int lengthB = b.length; 10 11 int indexA = 0; 12 int indexB = 0; 13 int i