C语言将两个整数数组合并为一个数组并重新排序
下面给定两个排序号的整数数组,将他们合并为一个数组并重新排序。
1 2 3 3 4
5 6 7
#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; }输出结果:
1 2 3 3 4
5 6 7