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

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

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

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#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;
}

结果:
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木是木木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值