题目描述
已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。
输入
输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。
输出
输出合并后的m+n个整数,数据之间用空格隔开。输出占一行。
样例输入 Copy
4 1 3 5 7 3 6 4 2
样例输出 Copy
7 6 5 4 3 2 1
提示
试图排序的孩子们要小心了~~~~~~
正确代码:
#include<iostream>
using namespace std;
#include<string>
int m1[1000000];
int n1[1000000];
int c[2000000];
int main()
{
int m;
cin >> m;
for (int i = m - 1; i >= 0; i--)
{
cin >> m1[i];
}
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> n1[i];
}
int s = 0,g = 0;
int i = 0;
while (s<m&&g<n)
{
if (m1[s] > n1[g])
{
c[i++] = m1[s++];
}
else
{
c[i++] = n1[g++];
}
}
while (s < m)
{
c[i++] = m1[s++];
}
while (g < n)
{
c[i++] = n1[g++];
}
for (int k = 0; k < m + n ; k++)
{
cout << c[k] << " ";
}
return 0;
}
另外附上我两次时间超限的代码:
#include<iostream>
using namespace std;
#include<string>
int m1[2000000];
int n1[1000000];
int main()
{
int m;
cin >> m;
for (int i = m - 1; i >= 0; i--)
{
cin >> m1[i];
}
int n;
cin >> n;
int judge = 0;
for (int i = 0; i < n; i++)
{
cin >> n1[i];
for (int j = 0; j < m; j++)
{
if (n1[i] > m1[j])
{
for (int k = m; k >j; k--)
{
m1[k ] = m1[k-1];
}
m1[j] = n1[i];
judge = 1;
m++;
break;
}
}
if (judge == 0)
{
m1[m] = n1[i];
m++;
}
}
for (int i = 0; i < m ; i++)
{
cout << m1[i] << " ";
}
return 0;
}
#include<iostream>
using namespace std;
#include<string>
int main()
{
int m;
cin >> m;
int* m1 = (int*)malloc(m * sizeof(int));
for (int i = 0; i < m; i++)
{
cin >> m1[i];
}
int n;
cin >>n;
int* n1 = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
{
cin >> n1[i];
}
int mn = m + n;
int* mn1 = (int*)malloc(mn * sizeof(int));
for (int i = 0; i < m; i++)
{
mn1[i] = m1[i];
}
for (int i = m ,j=0; j<n; i++,j++)
{
mn1[i] = n1[j];
}
for (int i = 0; i < mn - 1; i++)
{
for (int j = 0; j < mn - i - 1; j++)
{
if (mn1[j] < mn1[j +1])
{
int mad = mn1[j];
mn1[j] = mn1[j + 1];
mn1[j + 1] = mad;
}
}
}
for (int i = 0; i < mn; i++)
{
cout << mn1[i] << " ";
}
return 0;
}