具体要求。
输入:两个已经排好顺序(升序)的两个字符串
输出:一个合并在一起的有序(升序)的字符串
要求:
设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
输入:
abcdef
bcefghi
输出:abbccdeeffghi
通过分析写出如下代码:
#include<stdio.h>
#include<string.h>
int insert(char str[100],char a,int flag)//此处设计插入函数,signal用作记录上一次插入位置
{
int n=strlen(str);
for (int i = flag; i < n; i++)
{
if (a>=str[i]&&(a<str[i+1]))//插在两字符中间
{
for ( int j = n-1; j>=i; j--)
{
str[j+1]=str[j];
}
str[i]=a;
i++;
return i;
}
if (a>=str[i]&&str[i+1]==0)//排在字符串后
{
str[i+1]=a;
return i;
}
}
}
int main()
{
int n,m,j,signal=0;
char str1[100]={0},str2[100]={0};
gets(str1);
gets(str2);
n=strlen(str1);
for ( m = 0; m <= n; m++)
{
signal=insert(str1,str2[m],signal);//记录上一次插入位置
}
puts(str1);
printf("\n");
}
作业,尝试使用尽可能少的代码以及仅对两个字符串进行一次扫描。