下面给定两个排序号的整数数组,将他们合并为一个数组并重新排序。
#include <stdio.h>
#define NMAX 10
void printIntArray(int a[], int n);
void merge(int c[], int *nc, int a[], int na, int b[], int nb);
int main(void) {
int x[NMAX] = {1,3,5,6,7}; // 第一个排序好的数组
int y[NMAX] = {2,3,4}; // 第二个排序好的数组
int z[NMAX+NMAX]; // 合并后的数组
int nz;
merge(z,&nz,x,5,y,3);
printIntArray(z,nz);
}
// n 为数组 a 的元素个数;这些元素将被打印输出,5 个一行
void printIntArray(int a[], int n)
{
int i;
for (i=0; i<n; ){
printf("\t%d ", a[i++]);
if (i%5==0)
printf("\n");
}
printf("\n");
}
// a b 为排序好的数组,合并后保存到 c;函数返回数组 nc 的元素个数
void merge(int c[], int *nc, int a[], int na, int b[], int nb){
int cursora, cursorb, cursorc;
cursora=cursorb=cursorc=0;
while((cursora<na)&&(cursorb<nb))
if (a[cursora]<=b[cursorb])
c[cursorc++]=a[cursora++];
else
c[cursorc++]=b[cursorb++];
while(cursora<na)
c[cursorc++]=a[cursora++];
while(cursorb<nb)
c[cursorc++]=b[cursorb++];
*nc = cursorc;
}
输出结果: