栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言——如何较为高效的方法合并两个有序数组,使之成为一个有序数组

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言——如何较为高效的方法合并两个有序数组,使之成为一个有序数组

题目:有两个有序数组arr1[]和arr2[],将它们合并成数组arr[],要求arr[]也是有序数组。

思路:新定义一个数组arr,最大长度为100,从两数组最左边开始比起,把小的放入新集合,然后相应的index下标往下走,每次比较都是比较的最左边未比较过的元素(通过变量),循环比较,直至其中有一个数组遍历结束,将另一个数组剩余部分链接。

#define _CRT_SECURE_NO_WARNINGS

#include 

#define max 100//定义合并数组的最大长度
int arr[max];//定义合并的数组

int main() {

	int arr1[] = { 1,5,9,15,31,46,78,110 };
	int arr2[] = { 4,5,6,11,13,17,65,88,450,740,888,900 };
	//求出数组arr1的长度sz1和arr2的长度sz2
	int sz1 = sizeof(arr1) / sizeof(arr1[0]);
	int sz2 = sizeof(arr2) / sizeof(arr2[0]);
	//定义合并数组的元素个数
	int count = sz1 + sz2;
	//定义数组arr1的下表index1和arr2的下标index2
	int index1 = 0;
	int index2 = 0;

	for (int i = 0;i < count;++i) {
		if (index1 < sz1 && index2 < sz2) {//若两个数组均未遍历完
			if (arr1[index1] <= arr2[index2]) {
				arr[i] = arr1[index1];
				index1++;
			}
			else {
				arr[i] = arr2[index2];
				index2++;
			}
		}
		else if (index1 < sz1) {//若arr2已经遍历完了
			arr[i] = arr1[index1];
			index1++;
		}
		else if (index2 < sz2) {//若arr1已经遍历完了
			arr[i] = arr2[index2];
			index2++;
		}
	}

	//打印合并出来的数组
	for (int i = 0;i < count;++i) {
		printf("%d ", arr[i]);
	}

	return 0;
}

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/949669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号