#include<stdio.h>
#define N 100
int main(void)
{
int m, n, k, a[N], b[N], c[N*2];
scanf("%d%d", &m, &n);
InputArr(a, m); //读入a的m个元素
InputArr(b, n); //读入b的n个元素
sort(a, m); //排序
sort(b, n); //排序
k = merge(a, m, b, n, c); //合并两个数组
PrintArr(c, k); //输出数组c中k个元素
return 0; }
//升序
1.void sort( int a[ ], int n)
{
int i, j, temp;
for(i = 0; i < n-1; i++) /*比较交换排序*/
for(j = i+1; j < n; j++)
if(a[j] < a[i1])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
合并思路
(2)同时扫描a、b数组中的元素,a[i]、b[j]分别为两数组中待合并的最小元素,选择较小者合并到c中
i = 0, j = 0, k = 0;
while(i < m && j < n)
{
如果a[i] < b[j],则将a[i]合并入新序列, i++
如果a[i] > b[j],则将b[j]合并入新序列, j++
如果a[i] == b[j],则将a[i]合并入新序列, i++, j++
}
(3) 如果数组a中还剩有元素,合并到c中
如果数组b中还剩有元素,合并到c中
合并
/* 将集合a、b的数据合并到c中, 返回集合c中元素个数 */
int merge( int a[], int m, int b[], int n, int c[])
{
int i = 0, j = 0, k = 0;
while(i < m && j < n)
{
if(a[i] < b[j]) /*如果a[i]<b[j],则存入a[i] */
c[k++] = a[i++];
else if(a[i] > b[j]) /*如果a[i]>b[j],则存入b[j] */
c[k++] = b[j++];
else /* 如果a[i]==b[j],则存入a[i],舍去b[j] */
{
c[k++] = a[i]; i++; j++;
}
}
/* 如果数组a中还剩有元素,合并到c中 */
while(i < m)
c[k++] = a[i++];
/* 如果数组b中还剩有元素,合并到c中 */
while(j < n)
c[k++] = b[j++];
return k; //返回集合C中元素个数
}
多个小段复习巩固