题目描述
已知两非递减的顺序线性表,要求合并成一个新的非递减顺序线性表。(测试数据为整型)
输入
输入包含四行,第一行为自然数n,表示第一个非递减顺序线性表的长度;
第二行为n个自然数构成的非递减顺序线性表;
第三行为自然数m,表示第二个非递减顺序线性表的长度;
第四行为m个自然数构成的非递减顺序线性表。
输出
输出:用一行输出合并后的非递减顺序线性表,各数之间用一个空格隔开。
样例输入
2
1 3
3
2 3 6
样例输出
1 2 3 3 6
参考程序
#include<stdio.h>
#include<stdlib.h>
#define Maxsize 51
typedef struct list
{
int data[Maxsize];
int len;
}SqList;
void CreatList(SqList *&L, int a[], int n)
{
L = (SqList *) malloc (sizeof(SqList));
for(int i=0; i<n; i++)
L->data[i] = a[i];
L->len = n;
}
void Sort(SqList *&A, SqList *B)
{
for(int i=0; i<B->len; i++)
{
A->data[A->len] = B->data[i];
A->len++;
}
int temp;
for(int i=0; i<A->len; i++)
{
for(int j=i+1; j<A->len; j++)
{
if(A->data[i] > A->data[j] || A->data[i] == A->data[j])
{
temp = A->data[i];
A->data[i] = A->data[j];
A->data[j] = temp;
}
}
}
}
int main()
{
int n, m;
SqList *A, *B;
scanf("%d", &n);
int a[n];
for(int i=0; i<n; i++)
scanf("%d", &a[i]);
CreatList(A, a, n);
scanf("\n");
scanf("%d", &m);
int b[m];
for(int i=0; i<m; i++)
scanf("%d", &b[i]);
CreatList(B, b, m);
Sort(A, B);
for(int i=0; i<A->len; i++)
printf("%d ", A->data[i]);
return 0;
}
#include<iostream>
#include<algorithm> //算法
using namespace std;
int main()
{
int m,n,i;
int a[10001];
cin>>m;
for(i=0;i<m;i++)
{
cin>>a[i];
}
cin>>n;
for(i=m;i<m+n;i++)
{
cin>>a[i];
}
sort(a,a+m+n); //在[a,a+m+n)排序
for(i=0;i<m+n;i++)
{
cout<<a[i]<<" ";
}
}
#include<iostream>
using namespace std;
void MergeList(int a[], int b[], int m, int n, int c[]) {
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (a[i] <= b[j]) {
c[k++] = a[i++];
}
else {
c[k++] = b[j++];
}
}
while (i < m) {
c[k++] = a[i++];
}
while (j < n) {
c[k++] = b[j++];
}
}
int main() {
int m, n;
cin >> m;
int a[m];
for (int i = 0; i < m; i++) {
cin >> a[i];
}
cin >> n;
int b[n];
for (int i = 0; i < n; i++) {
cin >> b[i];
}
int c[m + n];
MergeList(a, b, m, n, c);
for (int i = 0; i < m + n; i++) {
cout << c[i] << " ";
}
return 0;
}
注意
该程序仅供学习参考!