输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到 大排列。
输入:
两个已经排好顺序(升序)的两个字符串
输出:
一个合并在一起的有序(升序)的字符串
要求:
设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
主要是找到更为简便的排序方法
#include <stdio.h>
#include <string.h>
#define Max 20
int main()
{
char str1[Max] = "0";//输入的字符串
char str2[Max] = "0";
gets(str1);
gets(str2);
int len1 = strlen(str1);//得到字符串的长度
int len2 = strlen(str2);
char endstr[Max * 2] = "0";//得到最终的字符串
int i = 0;//最终的字符串的下标
int j = 0;//字符串1的下标
int p = 0;//字符串2的下标
for (i = 0; i < len1 + len2; i++)
{
if (j < len1 && p < len2)
{
if (str1[j] < str2[p])
{
endstr[i] = str1[j];
j++;
}
else if (str1[j] == str2[p])
{
endstr[i] = str1[j];
j++;
i++;
endstr[i] = str2[p];
p++;
}
else
{
endstr[i] = str2[p];
p++;
}
}
else if (j == len1 && p < len2)//如果有字符串输入完成,就直接把第二个字符串输入即可
{
endstr[i] = str2[p];
p++;
}
else if (j < len1 && p == len2)
{
endstr[i] = str1[j];
j++;
}
}
printf("%s\n", endstr);
return 0;
}