【发布时间】:2021-01-12 15:56:44
【问题描述】:
我正在做以下问题:
给定由
n整数组成的序列a和由m整数组成的序列b,两个序列按升序排列。将上述两个序列组合成一个新序列c,这样c也是一个递增序列。打印c。
输入:
3
1 3 4
4
1 2 3 5
输出:
1 1 2 3 3 4 5
我的想法是首先将两个序列组合成序列c,然后按升序对序列c 进行排序。这是我的代码:
#include <stdio.h>
int main() {
//Inputting sequence a and b
int n, m;
int a[1001], b[1001];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d", &b[i]);
}
//Combine two sequence into c
int c[1001];
for (int i = 0; i < n; i++) {
c[i] = a[i];
}
for (int i = 0; i < m; i++) {
c[i + n] = b[i];
}
//Arrange sequence c in increasing order
int mid;
for (int i = 0; i < (n + m - 1); i++) {
for (int j = 1; j < (n + m); j++) {
if (c[i] > c[j]) {
mid = c[i];
c[i] = c[j];
c[j] = mid;
}
}
}
//Printing c
for (int i = 0; i < (n + m); i++) {
printf("%d ", c[i]);
}
return 0;
}
但是,当我使用测试用例[1,2,4],[1,2,5] 进行测试时,结果是1 4 2 2 1 5。谁能指出我的代码中的错误?我真的很感激。
【问题讨论】:
-
如果您知道序列 a 和 b 已经排序,为什么不在将条目添加到 c 时使用这个事实?
-
指令要求您合并两个排序的序列。本网站搜索框中的最后四个单词可能会准确地告诉您如何执行此操作,并且比您当前使用的 O(N^2) 算法更有效。两个初始序列都已经排序是一个非常重要的属性。
-
考虑添加一些输入验证,因为您为
a和b两个集合分配了预定义的内存量,并且通过输入获得的值可能更大。此外,数组c的声明大小至少应等于数组a和b组合的大小。