数据结构学习---线性表顺序存储结构的应用(三):融合排序操作

本文介绍了一种合并两个已排序顺序表的方法,通过比较并合并两个表中的元素来生成一个新的升序顺序表。提供了完整的C++实现代码示例。

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

融合排序操作:顺序表a和b升序排序;要求合并成顺序表c,也为升序排列

基本思路: 创建新的顺序表c, 依次比较a和b中的大小,按升序放入c 中。 注意将未比较完的剩余的元素放入c中。

void ComposeOperate(int *seq1, int *seq2, int &len1, int &len2 )
{
	//const int len = len1 +len2;
	vector <int> ivec;
	//for (int count1 = 0; count1 < len1; len1++)
	//	for (int count2 = 0; count2 < len2; len2++)
	int count1 = 0;
	int count2 = 0;
	while (count1 < len1 && count2 < len2)
		{
			if (seq1[count1] < seq2[count2])
			{
				ivec.push_back(seq1[count1]);
				count1++;
			}
			else 
			{
				ivec.push_back(seq2[count2]);
				count2 ++;
			}

		}
	if (len1-1 == count1) //b表先扫描完,将a表剩下的元素放入c中
	{
		for (int i = count2; i < len2; i++)
		{
			ivec.push_back(seq2[count2]);
		}
	}
	else //a表先扫描完,将b表剩下的元素放入c中
		for (int i = count1; i < len1; i++)
		{
			ivec.push_back(seq1[i]);
		}

	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << " " ;
}


附上整体程序:

#include <iostream>
#include <vector>

using namespace std;

void ComposeOperate(int *seq1, int *seq2, int &len1, int &len2 )
{
	//const int len = len1 +len2;
	vector <int> ivec;
	//for (int count1 = 0; count1 < len1; len1++)
	//	for (int count2 = 0; count2 < len2; len2++)
	int count1 = 0;
	int count2 = 0;
	while (count1 < len1 && count2 < len2)
		{
			if (seq1[count1] < seq2[count2])
			{
				ivec.push_back(seq1[count1]);
				count1++;
			}
			else 
			{
				ivec.push_back(seq2[count2]);
				count2 ++;
			}

		}
	if (len1-1 == count1) //b表先扫描完,将a表剩下的元素放入c中
	{
		for (int i = count2; i < len2; i++)
		{
			ivec.push_back(seq2[count2]);
		}
	}
	else //a表先扫描完,将b表剩下的元素放入c中
		for (int i = count1; i < len1; i++)
		{
			ivec.push_back(seq1[i]);
		}

	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << " " ;
}

int main()
{
	int len1 = 5;
	int len2 = 5;
	int seq1[5] = {2, 3, 5, 8, 9};
	int seq2[5] = {1, 2, 4, 5, 7};
	int *seqa = & seq1[0];
	int *seqb = & seq2[0];
	ComposeOperate(seqa, seqb, len1, len2);
	system ("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值