具体要求。
输入:两个已经排好顺序(升序)的两个字符串
输出:一个合并在一起的有序(升序)的字符串
要求:
设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
输入:
abcdef
bcefghi
输出:abbccdeeffghi
通过分析写出如下代码:
#include<stdio.h>
#include<Windows.h>
#pragma warning(disable:4996)
#define SIZE 100
void resort(char longer[], char shorter[],int l){
char c[SIZE] = { 0 };
char *p =shorter;
int i = 0;
while (*p&&i!=l){
if (*p >= longer[i]){
c[strlen(c)] = longer[i];
i++;
}
else{
c[strlen(c)] = *p;
*p++;
}
}
if (i != l){
while (i != l){
c[strlen(c)] = longer[i];
i++;
}
}
else{
while (*p){
c[strlen(c)] = *p;
*p++;}
}
printf("%s ", c);
}
int main(){
char arr1[SIZE];
gets(arr1);
char arr2[SIZE];
gets(arr2);
int n1 = strlen(arr1);
int n2 = strlen(arr2);
if (n1 > n2){
resort(arr1, arr2,n1);
}
else{
resort(arr2, arr1,n2);
}
system("pause");
return 0;
}
这样就实现了这个题的要求了。