对两个数组合并的同时进行排序

对两个数组合并的同时进行排序

    • 代码全貌
    • 过程讲解

这里分享一个最近看到的一个比较好用的代码,当用到两个数组相加并需要排序的时候可以作为一个工具类来使用。对两个数组a[]和b[]进行合并而且同时进行排序,返回一个有序的c[],并且c.length = a.length + b.length

代码全貌

import java.util.Arrays;

public class Array_Add_Sort {

	public static void main(String[] args) {
		
		//将两个int类型的一维数按从小到大的顺序组合并
		int[] oneArr = { 2, 11, 26, 27, 37, 44, 48, 60 };
		int[] twoArr = { 19, 35, 49, 55, 58, 75, 83, 84, 91, 93 };
		int[] threeArr = new int[oneArr.length + twoArr.length];
		int p = 0, q = 0;
		while (p < oneArr.length && q < twoArr.length) {
			threeArr[p + q] = oneArr[p] < twoArr[q] ? oneArr[p++] : twoArr[q++];
		}
		if (p < oneArr.length) {
			System.arraycopy(oneArr, p, threeArr, p + q, oneArr.length - p);
		} else if (q < twoArr.length) {
			System.arraycopy(twoArr, q, threeArr, p + q, twoArr.length - q);
		}
		System.out.println(Arrays.toString(threeArr));
	}
}

过程讲解

这里首先来声明一下数组1和数组2,也可以用方法的形参来传入,这里就先默认创建两个数组了。 再声明一个空的数组3,数组3的长度等于数组1和数组2的长度的和。

// 先声明3个数组
		int[] oneArr = { 2, 11, 26, 27, 37, 44, 48, 60 };
		int[] twoArr = { 19, 35, 49, 55, 58, 75, 83, 84, 91, 93 };
		int[] threeArr = new int[oneArr.length + twoArr.length];

这里声明两个下标计数器,用于稍后追踪数组1和数组2的下标。

		int p = 0, q = 0;

用一个while循环来对将数组1和数组2里的值添加到数组3当中,并且可以看到,在方法体中是用三目运算来判断,将较大的值放到当前数组3的位置中。比较的同时用p++或q++来让下标递增1。

		while (p < oneArr.length && q < twoArr.length) {
			threeArr[p + q] = oneArr[p] < twoArr[q] ? oneArr[p++] : twoArr[q++];
		}

这里有一种情况,当数组1或者数组2已经全部添加到数组3当中后,前面while中的判定就无法满足了。所以这里的作用就是将剩下数组中的部份再添加到数组3当中。这里如果把这段if去掉,则数组3的输出结果为:[2, 11, 19, 26, 27, 35, 37, 44, 48, 49, 55, 58, 60, 0, 0, 0, 0, 0]

if (p < oneArr.length) {
			System.arraycopy(oneArr, p, threeArr, p + q, oneArr.length - p);
		} else if (q < twoArr.length) {
			System.arraycopy(twoArr, q, threeArr, p + q, twoArr.length - q);
		}

然后对结果进行输出,数组3也可以作为方法的return

System.out.println(Arrays.toString(threeArr));

最后执行完整代码,返回结果为:[2, 11, 19, 26, 27, 35, 37, 44, 48, 49, 55, 58, 60, 75, 83, 84, 91, 93]

你可能感兴趣的:(对两个数组合并的同时进行排序)