二路归并排序

二路归并排序实现
本文介绍了一种简单的二路归并排序算法实现方法。通过合并两个已排序的数组来创建一个新的有序数组。该过程涉及比较两个数组的元素并将较小的元素放入临时数组中,直至一个数组耗尽,然后将另一个数组剩余的元素追加到临时数组末尾。

二路归并排序:将两个按值有序序列合并成一个按值有序序列

 

排序基本思想是:

     申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

      设定两个指针,最初位置分别为两个已经排序序列的起始位置

      比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

      重复步骤3直到某一指针达到序列尾

      将另一序列剩下的所有元素直接复制到合并序列尾

 

public class TwoWayMergeSort {
	/**
	 * 二路归并排序
	 * @param data1
	 * @param data2
	 * @return
	 */
	public static int[] two_way_mergeSort(int[] data1, int[] data2) {
		int[] temp = new int[data1.length + data2.length];
		int i = 0, j = 0, iter = 0;
		for (; i < data1.length && j < data2.length;) {
			if (data1[i] <= data2[j]) {
				temp[iter] = data1[i];
				iter++;
				i++;
			} else {
				temp[iter] = data2[j];
				iter++;
				j++;
			}
		}
		for (; i < data1.length; i++, iter++) {
			temp[iter] = data1[i];
		}
		for (; j < data2.length; j++, iter++) {
			temp[iter] = data2[j];
		}
		return temp;
	}
	
	public static void main(String[] args) {
		int[] v1 = { 1, 2, 4, 8};
		int[] v2 = {3, 5, 6,7 };
		int[] v = TwoWayMergeSort.two_way_mergeSort(v1, v2);

		for (int key : v) {
			System.out.format(" %d", key);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值