【题目】两个排序数组A1,A2,内存在A1的末尾有足够多的空余空间容纳A2。实现函数,把A2中的所有数字都插入到A1中并且所有数字是排序的。
【分析】此题与替换空格思想一致,从前到后直接排序复制,由于多次移动复制将产生很大的时间浪费,故从后向前复制,思想参考替换空格。
【算法代码】
#include<stdio.h>
#define MAX 100
void merge(int a[ ] , int b[ ] ,int m, int n, int max)
{
if (m+n+1 >max)
return ;
int new_a_index = m+n ;
int old_a_index = m -1;
int old_b_index = n - 1 ;
a[new_a_index--] = '\0';
while(old_a_index>=0 && old_b_index>=0)
{
if(a[old_a_index]<=b[old_b_index])
{
a[new_a_index--] = b[old_b_index];
--old_b_index;
}
else
{
a[new_a_index--] = a[old_a_index];
--old_a_index;
}
}
}
int main()
{
int s1[MAX] = {1,3,6};
int s2[] = {2};
merge(s1,s2,3,1,MAX);
int i = 0;
while(s1[i]!='\0')
{
printf("%d",s1[i++]);
}
return 0;
}