合并两个数组

#include <iostream>
using namespace std;
int sortedInsert(int A[],int lenA,int B[],int lenB)
{
    if(B == NULL)
        return lenA;
    int len = lenA + lenB;
    int indexNew = len-1;
    int indexA = lenA-1;
    int indexB = lenB-1;
    while( indexA>=0 && indexB>=0 )
    {
        if(A[indexA] > B[indexB])
        {
            A[indexNew] = A[indexA--];

        }else{
            A[indexNew] = B[indexB--];
        }
    //    printf("%d \n",A[indexNew]);
        //printf("here lenA = %d,lenB = %d\n",indexA,indexB) ;
        indexNew --;
    }
    //下面处理剩余的那部分;
    //printf("here lenA = %d,lenB = %d\n",indexA,indexB) ;
    while(indexA>=0)
    {
        //
        A[indexNew] = A[indexA];
        //printf("%d ",A[indexNew]);
        indexNew--; indexA -- ;
    }
    //printf("OK");
    while(indexB>=0)
    {

        A[indexNew] = B[indexB];
        //printf("%d ",A[indexNew]);
        indexNew--; indexB -- ;
    }
    return lenA+lenB;
}
int intCmp(int * A ,int lenA,int * expected ,int lenExpected)
{
    if(lenA != lenExpected)
        return -1;
    for(int i = 0;i<lenA;i++)
        if(A[i]!=expected[i])
        {
            //printf("%d %d %d\n",i,A[i],expected[i]);
            return -1;
        }
    return 0;
}
void test(char * testNumber,int *A,int lenA,int *B,int lenB,int* expected,int lenExpected)
{
    lenA = sortedInsert(A,lenA,B,lenB);
    printf("%s ",testNumber);
    if(intCmp(A,lenA,expected,lenExpected) == 0 )
        printf("passed\n");
    else
        printf("failed\n");
}
void test1()//B插在A的后头;
{
    int A[100]={1,3,5,7,9};
    int B[]={2,4,6,8};
    //sortedInsert(A,5,B,4);
    int expected[]={1,2,3,4,5,6,7,8,9};
    test("test1",A,5,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));
}
void test2()//B要插在A的前头;
{
    int A[100]={6,7,8,9};
    int B[]={1,2,3,4,5};
    //sortedInsert(A,5,B,4);
    int expected[]={1,2,3,4,5,6,7,8,9};
    test("test2",A,4,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));
}
void test3()//A没有内容
{
    int A[100]={};
    int B[]={1,3,5,7,9};
    //sortedInsert(A,5,B,4);
    int expected[]={1,3,5,7,9};
    test("test3",A,0,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));
}
void test4()//B没有内容
{
    int A[100]={1,3,5,7,9};
    int B[]={};
    //sortedInsert(A,5,B,4);
    int expected[]={1,3,5,7,9};
    test("test4",A,5,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));
}
void test5()//A,B都没有内容
{
    int A[100]={};
    int B[]={};
    //sortedInsert(A,5,B,4);
    int expected[]={};
    test("test5",A,0,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));
}
void test6()//B为空指针
{
    int A[100]={1,3,5,7,9};
    int * B = NULL;
    //sortedInsert(A,5,B,4);
    int expected[]={1,3,5,7,9};
    test("test6",A,5,B,sizeof(B)/sizeof(int),expected,sizeof(expected)/sizeof(int));
}
int main()
{
    test1();
    test2();
    test3();
    test4();
    test5();
    test6();
    return 0;
}

合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。

时间: 2024-12-13 15:33:02

合并两个数组的相关文章

js如何合并两个数组

js如何合并两个数组:本章节介绍一下如何合并两个数组,希望对大家有所帮助.实例代码:实例一: var arrOne=["蚂蚁部落","青岛市南区",3]; var arrTwo=["分享交流","antzone",600]; console.log(arrOne.concat(arrTwo)); console.log(arrOne); console.log(arrTwo); 由以上代码的输出结果可以看出concat()函数

合并两个数组 - concat()

使用 concat() 方法来合并两个数组. 编辑您的代码: <html> <body> <script type="text/javascript"> var arr = new Array(3) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas" var arr2 = new Array(3) arr2[0] = "James

javascript合并两个数组

在开发的过程中,我们很多时候会遇到需要将两个数组合并成一个数组的情况出现. var arr1 = [1, 2, 3]; var arr2 = [4, 5, 6]; // 将arr1和arr2合并成为[1, 2, 3, 4, 5, 6] 这里总结一下在JavaScript中合并两个数组的方法. for循环数组 这个方式是最简单的,也是最容易实现的. var arr3 = []; // 遍历arr1 for (var i = 0; i < arr1.length; i++) { arr3.push(

合并两个数组的两种方式的异同

本文讨论合并数组的两种方式:$a+$b , array_merge($a,$b) 操作符+,在前一个数的基础上插入后一个数组,如果有相同的抛弃,而array_merge 是在前一个参数基础上插入后一个参数,如果有相同用的key 用后一个覆盖.实例如下: php > $a = array('a'=>'1','b'=>'2','c'=>'3'); php > $b = array('c'=>3,'d'=>'4','e'=>'5'); php > $c =

探讨JS合并两个数组的方法

我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: 1 2 var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: 1.concat js的Array对象提供了一个叫concat()方法,连接两个或更多的数组,并返回结果. 1 var c = a.concat(b);//c=[1,2,3,4,5,6] 这里有一个问题,concat方法连接a.b两个数组后,a.b两个数组的数据不变,同时会返回一个新的数组.

编程练习:合并两个数组(包括三种快排程序)

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 /*确定快排1的分界值*/ 5 int partition1(int array[],int r,int m){ 6 int i,j=m,temp,flag1=0,flag2=0;//比较的数是大数时将flag1置1,也就是当遇到大数之后,再次遇到小数才进行前后交换: 7 //flag2为0时,j=i,第一次遇到大数时,把flag2置1;也就是说,j的初始值为参考值的坐标, 8 //当遇到

JS合并两个数组的方法

我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: 1 2 var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: 1.concat js的Array对象提供了一个叫concat()方法,连接两个或更多的数组,并返回结果. 1 var c = a.concat(b);//c=[1,2,3,4,5,6] 这里有一个问题,concat方法连接a.b两个数组后,a.b两个数组的数据不变,同时会返回一个新的数组.

沫沫金:Java快速合并两个数组【绝技】

需求: 合并两个Object[] a 和Object[] b: 方案 List<Object[]> quotas = new ArrayList<Object[]>(); Object[] objs1 = quotas_1.get(i); Object[] objs2 =quotas_2.get(i); //合并多sheet页数据,切割行级合并 List list = new ArrayList(Arrays.asList(objs1)); list.addAll(Arrays.a

使用O(n)的时间复杂度合并两个数组

题目描述: 有两个排序数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,请实现一个函数,把A2中的所有数字插入到A1中并且所有的数字是有序的. #include<iostream> using namespace std; void Merge(int A1[],int n,int A2[],int m) { int i = n-1; int p = n+m-1; int j = m-1; while(p>i) { if(i>=0&&A1[i]>A2