设定两个已排好序的数组a[p···q],b[q+1···t],(注意这里p、q代表数组下标,而非数组元素),使用两个指针s、r分别指向a[p],b[q+1],在s<q和r<t的前提下,每一次比较元素a[s],b[r],建一个数组c[ ]存放新数组,若a[s]<b[r],则将a[s]写入c数组中,s加一;若b[r]<a[s],则将b[r]写入c数组中,r加一;若两者相等,则把a[s]写入数组。当因为s>q或r>t而跳出该过程时,若是第一种情况,说明a数组已经读完了,则要将b数组剩下的数添加到c中去;反之,将a数组剩下的数添加到c中去。
C语言实现如下:
#include <stdio.h>
#define A 4
#define B 5
int main(){
int a[A]={1,7,9,10};
int b[B]={2,3,8,9,11};
int c[A+B];
int s,r=0;
int i=1;
while(s<A&&r<B){
if(b[r]<a[s]){
c[i]=b[r];
r++;
}else{
c[i]=a[s];
s++;
}
i++;
}
while(s<A){
c[i++]=a[s++];
}
while(r<B){
c[i++]=b[r++];
}
for(i=1;i<=A+B;i++){
printf("%d ",c[i]);
}
}