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

具体要求。
输入:两个已经排好顺序(升序)的两个字符串
输出:一个合并在一起的有序(升序)的字符串
要求:
设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
输入:
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;
}

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

    原文作者:草里多
    原文地址: https://blog.csdn.net/weixin_43815275/article/details/106434554
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞