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

本文介绍了一种高效的字符串合并算法,该算法能在一次扫描内完成两个已排序字符串的合并,避免了传统的连接和排序方法带来的效率低下问题。通过具体实例展示了算法的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值