输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。

具体要求。
输入:两个已经排好顺序(升序)的两个字符串
输出:一个合并在一起的有序(升序)的字符串
要求:
设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
输入:
abcdef
bcefghi
输出:abbccdeeffghi
通过分析写出如下代码:

#include
#include
#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;
}

这样就实现了这个题的要求了。

你可能感兴趣的:(C语言)