`

合并两个已排序的数组为同一个数组

 
阅读更多

问题描述: 设子数组a[0:k]和a[k+1:n-1]已排好序(0<=k<=n-1).试设计一个合并这两个子数组为排好序的数组a[0:n-1]的算法.要求算法在最坏的情况下所用的计算时间为O(n), 且只用到O(1)的辅助空间. #include <stdio.h>

void DisplayArray(int *pArray, int nLen)
{
    for (int i = 0; i < nLen; ++i)
    {
        printf("array[%d] = %d\n", i, pArray[i]);
    }
}

// pArray1和pArray2是已经排好序的数组,要求将它们按照顺序合并到pArray中
// 排序之后的数组不会有重复的元素
void MergeArray(int *pArray1, int nLen1, int *pArray2, int nLen2, int *pArray)
{
    int i, j, n;

    i = j = n = 0;
    while (i < nLen1 && j < nLen2)                  // 循环一直进行到拷贝完某一个数组的元素为止
    {
        if (pArray1[i] < pArray2[j])                // 拷贝array1的元素
        {
            pArray[n++] = pArray1[i++];
        }
        else if (pArray1[i] > pArray2[j])            // 拷贝array2的元素
        {
            pArray[n++] = pArray2[j++];                      
        }
        else                                          // 相等的元素拷贝
        {
            pArray[n++] = pArray2[j++];                      
            ++i;
        }
    }

    if (i == nLen1)                              // 如果array1已经被拷贝完毕就拷贝array2的元素
    {
        while (j < nLen2)
            pArray[n++] = pArray2[j++];
    }
    else                                         // 如果array2已经被拷贝完毕就拷贝array1的元素
    {
        while (i < nLen1)
            pArray[n++] = pArray1[i++];
    }
}

int main()
{      
    int array1[] = {1, 4, 5, 7};
    int array2[] = {2, 3, 6, 8};
    int array3[8];
    MergeArray(array1, 4, array2, 4, array3);
    printf("Merge Array:\n");
    DisplayArray(array3, 8);

    return 1;
}

分享到:
评论

相关推荐

    合并两个已经排序的数组为另一个数组算法

    ### 合并两个已排序数组为另一个排序数组算法 在计算机科学中,处理有序数据集是一种常见的需求。本文将深入探讨如何将两个已排序的数组合并成一个新的已排序数组,并通过Java语言实现这一过程。 #### 知识点一:...

    将两数组合并成一个数组并排序

    在这个场景中,我们要讨论如何在C语言中将两个已排序的数组合并成一个新的排序数组。 首先,让我们了解数组的基本概念。数组是由相同类型元素构成的集合,可以通过索引来访问每个元素。在C语言中,数组的声明通常...

    将两个有序数组,合并成另一个有序的数组,升序

    在这个过程中,我们需要定义三个数组,分别用作两个输入数组和一个用于存储合并结果的数组。假设这两个输入数组为a和b,输出数组为c。另外,我们还需要定义三个变量ai、bi和ci,它们分别用来追踪数组a、b和c的当前...

    两个数组合并排序

    本文将围绕“两个数组合并排序”这一主题展开,深入解析如何有效地将两个数组进行合并并按照一定顺序进行排序。 ### 核心概念:数组、合并与排序 #### 数组(Array) 数组是一种基本的数据结构,用于存储具有相同...

    Merge Sorted Array合并排序数组leetcode

    Merge Sorted Array 合并 排序 数组 leetcode

    c语言合并两个已排序数组的示例(c语言数组排序)

    问题:将两个已排序数组合并成一个排序数组 这里先不考虑大数据量的情况(在数据量很大时不知大家有什么好的思路或方法?),只做简单数组的处理。 简单代码如下: 说明:之所以把merge函数定义成返回数组长度,是因为...

    Merge(合并两个已排好序的数组)

    标题中的“Merge(合并两个已排好序的数组)”是一个经典的计算机科学问题,涉及到数据结构和算法的知识。在处理这个问题时,我们通常会用到数组和排序的基本概念。以下是关于这个主题的详细解释: **一、数组** 数组...

    matlab开发-多维数组的合并排序

    1. **分解**:将多维数组沿着选定的轴分解成两个或更多的子数组。对于多维数组,我们可能需要沿不同轴进行多次分解,直到子数组足够小,可以直接排序。 2. **排序**:对每个子数组进行排序。对于一维子数组,可以...

    高效合并两个有序数组.py

    这段代码是一个名为merge的函数,它实现了将两个已排序的数组nums1和nums2合并到nums1里的功能。输入参数nums1和nums2分别为两个数组,m和n表示nums1中待处理部分的长度和nums2的剩余长度。函数的核心是while循环,...

    链表_链表_用链表将两个数组升序合并到另一个数组_

    本主题探讨的是如何利用链表将两个已排序的数组升序合并到一个新的数组中。这个操作在数据处理、排序算法以及各种复杂的数据结构实现中都有广泛的应用。 链表与数组相比,它的主要优势在于插入和删除操作的时间...

    VB 数组做参数合并排序

    `Merge`函数负责合并两个已排序的子数组,返回合并后的有序数组。 在实际应用中,你可以调用`MergeSort`函数,传入你需要排序的数组的引用,例如: ```vb Dim numbers() As Integer numbers = Array(3, 1, 4, 1, 5...

    两个升序的数组A、B,将AB合并到C,保持升序,去除重生的元素

    首先,我们要明确合并两个数组的基本思路。在不考虑去重的情况下,最简单的方法是遍历两个数组,每次取较小的元素添加到结果数组。但在这个问题中,我们需要在合并的同时排除重复元素,因此需要更复杂的策略。 一种...

    c语言编程题之数组操作合并两个有序数组.zip

    在本编程题中,我们要探讨的是如何合并两个已排序的数组。这个问题在很多实际应用中都有所体现,例如数据库查询优化、数据排序算法等。解决这类问题有助于提升程序处理数据的效率。 首先,我们要理解有序数组的概念...

    实验报告-先排序数组再组合1

    实验报告“先排序数组再组合1”探讨了如何将两个已排序的数组合并为一个有序数组,这是一个在数据结构和算法领域常见的问题。本实验的主要目的是通过实践掌握数组操作、排序以及动态数组的使用。 实验环境未具体给...

    刷题:给两个有序的数组,找出合并后的中位数

    刷题:给两个有序的数组,找出合并后的中位数

    两个有序数组归并排序

    给定两个有序数组a b 使合并后的数组仍然有序 归并算法的事件复杂度为O logn

    工程实践 第一部分 题目一 求两个集合的合并运算 题目二 求两个有序表合并算法.zip

    合并两个集合,可以创建一个新的数组,遍历两个原始数组并依次添加不重复的元素。需要注意的是,数组在内存中预分配固定大小,因此在合并时需要考虑新数组的大小,避免溢出。 2. **链表实现**:链表由一系列节点...

    合并已排序的数组:给定两个已排序的数组,该函数将它们组合成一个唯一的已排序数组-matlab开发

    在 MATLAB 开发中,有时我们需要处理多个已排序的数组,并且需要将它们合并为一个大的已排序数组。这种操作在数据分析、数据处理或算法优化中非常常见。标题提到的"合并已排序的数组"功能正是解决此类问题的一种高效...

Global site tag (gtag.js) - Google Analytics