输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到 大排列。
输入:
两个已经排好顺序(升序)的两个字符串
输出:
一个合并在一起的有序(升序)的字符串
要求:
设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 4 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 5 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 6 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include <stdio.h>
#include <string.h>
int main() {
char a[100] = {'0'}, b[100] = {'0'}, c[200] = {'0'};
int l1, l2, i, j, k;
gets(a);
gets(b);
l1 = strlen(a);
l2 = strlen(b);
if (l1 == 0)
printf("%s\n", b);
if (l2 == 0)
printf("%s\n", a);
if (l1 != 0 && l2 != 0) {
for (i = 0, j = 0, k = 0; k < l1 + l2;) {
if (a[i] <= b[j]) {
c[k] = a[i];
i++, k++;
if (i == l1) {
for (; j < l2; k++, j++) {
c[k] = b[j];
}
}
} else if (a[i] > b[j]) {
c[k] = b[j];
j++, k++;
if (j == l2) {
for (; i < l1; k++, i++) {
c[k] = a[i];
}
}
}
}
for (k = 0; k < l1 + l2; k++)
printf("%c", c[k]);
printf("\n");
}
return 0;
}