排序两个数组

有两个排序的数组A1和A2,内存在A1的末尾有容纳足够多的空余空间A2。 请实现一个函数,把A2中的所有数字插入A1中,并且所有的数字是排序的。

思路:
从尾到头比较A1和A2中的数字,并把较大的数字复制到A1中合适的位置。这样就能够减少移动的次数,从而提高效率。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define N1 10  //数组1的大小
#define N2 4  //数组1的大小
void SortTwoArray(int *arr1, int *arr2, int len1, int len2)
{
    assert(arr1 && arr2 && len1 > 0 && len2 > 0);
    int len = len1 + len2;
    len1--;
    len2--;
    len--;
    while (len1 >= 0 && len2 >= 0)
    {
        if (arr1[len1] >= arr2[len2])
            arr1[len--] = arr1[len1--];
        else 
            arr1[len--] = arr2[len2--];
    }
    while (len1 >= 0)
        arr1[len--] = arr1[len1--];
    while (len2 >= 0)
        arr1[len--] = arr2[len2--];
}
int main()
{
    int arr1[N1] = { 1, 3, 5, 7, 9 };
    int arr2[N2] = { 2, 4, 6, 8 };
    //放置数时,应保证arr2数组里的数+arr1的数<arr1数组的最大容量
    int len1 = 5;
    int len2 = 4;
    SortTwoArray(arr1, arr2,len1, len2);
    for (int i = 0; i < len1 + len2; i++)
    {
        printf("%d ", arr1[i]);
    }
    printf("\n");
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sifanchao/article/details/80704514
今日推荐