合并两个有序表到新的有序表

发布于:2023-01-04 ⋅ 阅读:(360) ⋅ 点赞:(0)

系列目录:

左右移动(旋转)数组元素

查找两个升序数组的中间数

判断数组的某一个元素的数量是否超过了整个数组数量的一半

文图介绍 

将有序数组A和有序数组B合并得有序数组C
A
1 2 3 4 5
B
2 3 4 5 6
C
1 2 2 3 3 4 4 5 5 6

 一、实现算法思想: 

首先,按顺序不断取下两个数组元素的较小值存入新的数组中。然后哪个数组的元素有剩余的,直接添加到新数组的后面,过程描述如下:

A和B较小元素为1,则1存入新表。

C
1

A和B较小元素均为2,随便哪一个存入新表。

C
1 2

以此类推……一直到:

A和B较小元素为5,这里如果存A,此时A已读取完

C
1 2 2 3 3 4 4 5

B还有5和6,则直接放入新表的后面即可

C
1 2 2 3 3 4 4 5 5 6
完成合并!!!

提示:自己动手画图后思路更加清晰 ! 

二、实现代码  

bool Del_s_t(SqList A, SqList2 B, SqList3& C) {
	if (A.length + B.length > C.maxSize)//不能大于顺序表最大长度
	{
		return false;
	}
	int i = 0, j = 0, k = 0;
	while (i < A.length && j < B.length)//两两比较,较小值存入新表
	{
		if (A.data[i] <= B.data[j])
		{
			C.data[k++] = A.data[i++];
		}
		else
		{
			C.data[k++] = B.data[j++];
		}
	}
	//剩余的添加到新表
	while (i < A.length)
	{
		C.data[k++] = A.data[i++];
	}
	while (j < B.length)
	{
		C.data[k++] = B.data[j++];
	}
	C.length = A.length + B.length;
	return true;
}

三、运行结果 

自己敲!!!

四、总结 

以上就是本章要讲的内容,本文简单介绍两个有序数组的合并,提供了能使我们快速便捷地思路和方法。


网站公告

今日签到

点亮在社区的每一天
去签到