【剑指offer】排序数组合并

本文介绍了一种算法,用于将两个已排序的数组合并为一个新的排序数组。提供了两种实现方法:一是通过逐个比较并手动填充目标数组;二是利用现有的数组复制和排序API。这两种方法都确保了最终数组中的元素保持有序。

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

题目:

两个排序数组A1和A2,实现算法,将A2中的所有数字插入到A1中,并且所有数字是排序的。


分析:

数组移动与合并首先想到从前往后遍历,可能出现覆盖或多次移动情况,因此常采用从后往前的操作。


实现:

(1)将每位数字比对移动

public int[] insert(int a[],int b[]){
		int len1 = a.length;
		int len2 = b.length;
		int len = len1+len2;
		int c[] = new int[len];
		int i=len1-1;
		int j=len2-1;
		int clen=len-1;
		while(i>=0&&j>=0){
			if(b[j]>a[i]){
				c[clen--]=b[j--];
			}
			else{
				c[clen--]=a[i--];
			}
		}
		while(i>=0){
			c[clen--]=a[i--];
		}
		while(j>=0){
			c[clen--]=b[j--];
		}
		return c;
	}
注意:比较两个数组,可能在最后出现一个比较完毕,另一个还存在元素,因此要做最终的判断。

(2)使用API实现复制及排序

public void sort() {
		int[] arr1 = {1, 2, 36,55,77}; 
		int[] arr2 = {10, 20, 30, 40};
		int[] newArr = new int[arr1.length + arr2.length]; 
		System.arraycopy(arr1, 0, newArr, 0, arr1.length); 
		System.arraycopy(arr2, 0, newArr, arr1.length, arr2.length);
		for (int i : newArr) {
		System.out.print(i + ",\t");
		}
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值