有两个排序的数组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;
}