`

两个数组的归并

 
阅读更多
package org.son;

import java.lang.String;
import java.lang.System;
import java.util.Arrays;

public class Demo {
	public static void main(String[] args) {
		int[] a = { -1, 5, 9, 15, 85, 98, 100 };
		int[] b = { -2, 6, 8, 14, 73, 85, 97 };
		System.out.println(checkSort(a));
		sort(a);
		System.out.println(checkSort(a));
		System.out.println(Arrays.toString(merge(a, b)));

	}

	public static boolean checkSort(int[] a) {
		// 使用插入排序进行验证
		for (int x = 0; x < a.length - 1; x++) {
			for (int y = x; y > 0; y--) {
				if (a[y - 1] > a[y])
					return false;
			}
		}
		return true;
	}

	public static void sort(int[] a) {
		// 使用了插入排序
		for (int i = 0; i < a.length - 1; i++) {
			for (int j = i; j > 0 && a[j - 1] > a[j]; j--) {
				int temp = a[j];
				a[j] = a[j - 1];
				a[j - 1] = temp;
			}
		}
	}

	private static int[] merge(int[] a, int[] b) {
		int[] result = new int[a.length + b.length];
		if (checkSort(a) && checkSort(b)) {
			// 两个数组都处于排序状态
			int i = 0, j = 0, k = 0;
			while (i <= a.length - 1 && j <= b.length - 1) {
				// 两个数组都没有数据用完
				if (a[i] <= b[j])
					result[k++] = a[i++];
				if (b[j] < a[i])
					result[k++] = b[j++];
			}
			// a数组未用完,b数组用完了
			while (i <= a.length - 1 && j > b.length - 1) {
				result[k++] = a[i++];
			}
			// b数组未用完,a数组用完了
			while (j <= b.length - 1 && i > a.length - 1) {
				result[k++] = b[j++];
			}
		} else {
			// 如果数组a属于非排序状态则对a进行排序
			if (!checkSort(a))
				sort(a);
			// 如果数组b属于非排序状态则对b进行排序
			if (!checkSort(a))
				sort(b);
			merge(a, b);
		}
		return result;
	}
}

 

分享到:
评论

相关推荐

    编写一个程序,将两个元素从小到大有序的一维数组归并成一个有序的一维数组。

    【输出形式】程序将两个有序一维数组合并为一个有序数组并按照从小到大顺序输出。每个元素输出时用空格分隔,最后一个输出之后没有空格。 【样例输入】 6 2 5 8 11 20 35 4 1 6 15 60 【样例输出】1 2 5 6 8 11 15 ...

    两个有序数组归并排序

    给定两个有序数组a b 使合并后的数组仍然有序 归并算法的事件复杂度为O logn

    将两个有序数组,合并成另一个有序的数组,升序

    将两个有序数组,合并成另一个有序的数组,升序。将两个有序数组,合并成另一个有序的数组,升序。将两个有序数组,合并成另一个有序的数组,升序

    C语言用分治法实现数组归并排序算法实现

    (3)回溯时合并子问题的解,在两个子问题的解中大者取大,小者取小,即合并为当前问题的解。 归并排序的过程是,将数组分为许多的组,即将数组元素多的数组分为数组元素少的数组,然后再将其合并。它的优点是,...

    归并排序算法实现

    利用的是递归的思想 核心是将已经排好序的两个数组归并成一个有序数组。 输入:数组的长度 输出:排好序的输入 参考:算法导论英文第二版P29

    合并两有序数组

    将一个数组中,已经有序的两部分,重新进行排序,得到排序后的有序完整数组。

    C语言演示对归并排序算法的优化实现

    如果有两个数组已经有序,那么可以把这两个数组归并为更大的一个有序数组。归并排序便是建立在这一基础上。要将一个数组排序,可以将它划分为两个子数组分别排序,然后将结果归并,使得整体有序。子数组的排序同样...

    Java实现归并排序算法(源代码)

    该算法的核心在于合并两个有序数组的操作,通过比较两个数组中的元素,将它们按顺序放入一个新的数组中,从而完成合并。归并排序的时间复杂度为O(nlogn),是一种稳定的排序算法,适用于各种规模的数据集。在Java实现...

    java实现归并排序算法

    mergeSort 方法实现了归并...它借助两个辅助数组 leftArray 和 rightArray,将原数组中的元素按大小顺序放入这两个数组,并根据比较结果依次选择较小的元素放入原数组中。最后,将剩余未处理的元素放入原数组中即可。

    用递归和非递归两种方式实现归并排序

    归并排序是一种基于分治思想的排序算法,它将待排序的数组分成两部分,分别对这两部分递归地进行排序,最后将两个有序子数组合并成一个有序数组。它的时间复杂度为O(nlogn)。 归并排序的基本思路是将待排序的数组...

    Python3实现归并排序(源代码)

    归并排序的实现过程包括分解和合并两个主要步骤:分解是将数组不断分割成更小的子数组,直到每个子数组只包含一个元素;合并则是将两个已排序的子数组合并成一个新的有序数组。归并排序具有稳定性好、时间复杂度低...

    归并排序的代码

    采用归并排序将一个数组的两个排好序的子数组合并成为一个排好序的子新数组

    C++归并排序详解以及代码实现

    在归并排序中,合并操作是将两个有序表合并成一个有序表的过程。 归并排序的原理是将数组不断分成两半,直到每个子数组只有一个元素,然后将这些子数组合并成一个有序的数组。合并操作需要两个子数组都是有序的,...

    python 有序数组的平方,给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非

    # 有序数组的平方 ...# 方法比较多, 比如先找出最中心的数字后转换成两个数组进行归并运算, 但是双指针方法是最简单的 # 截止条件定在为正负分界线上, 一旦达到表示其中一个数字遍历完毕, 剩下的直接进行追加即可

    将数组元素按照从小到大的顺序排列

    1、 在main方法中创建一个含有10个元素的int型数组,进行以下操作:(1)将数组元素按照从小到大的顺序排列;(2)对排好序的数组使用折半查找(使用递归和非递归两种形式分别实现)查找某一个int元素。

    统计数组中逆序对

    统计数组中的逆序对的个数,基于归并排序的思想,先拆分为单个元素,再合并为两个元素的数组,组内统计后,排序,进行组建统计

    剑指Offer – 面试题51. 数组中的逆序对(归并排序,求逆序对)

    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制: 0 &lt;= 数组长度 &lt;= 50000 来源:...

    数据结构-归并排序.doc

    而对两个有序表的归并,称为二路归并。对于一个表进行归并排序,可以理解为 对该表进行了多次二路排序。因此,本实验的核心即转化为设计二路归并算法,并对其 进行递归。 1. 输入形式:键盘输入一组数据 输入值范围...

    数据结构 VC实现 归并排序

    合并排序(MERGE SORT)是又一类不同的排序方法,合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。它的基本思想就是假设数组A有N个元素,那么可以看成数组A是又N个...

    Leetcode 题解.pdf

    归并两个有序数组是另一个常用的算法思想,主要用于合并两个有序数组。例如 Leetcode 的 88 题 Merge Two Sorted Lists(Easy),我们可以使用双指针来归并两个有序数组。 在这个题目中,我们可以使用双指针指向两...

Global site tag (gtag.js) - Google Analytics