归并排序

package test;

public class combinSort {

	public int[] sort(int[] arr) {
		
		if (arr.length > 2) {

			int[][] splitarr = splitArr(arr);

			return combinArr(sort(splitarr[0]), sort(splitarr[1]));

		} else if (arr.length == 2) {

			return exchangeArr(arr);
			
		} else {
			
			return arr;
		}

	}

	private int[] exchangeArr(int[] arr) {
		if (arr[0] > arr[1]) {
			int temp = arr[1];
			arr[1] = arr[0];
			arr[0] = temp;
		}
		return arr;
	}

	private int[][] splitArr(int[] arr) {
		int size1 = arr.length / 2;
		int size2 = arr.length - size1;
		int[] arr1 = new int[size1];
		for (int i = 0; i < size1; i++) {
			arr1[i] = arr[i];
		}

		int[] arr2 = new int[size2];
		for (int i = 0; i < size2; i++) {
			arr2[i] = arr[size1 + i];
		}
		System.out.println("arr1:");
		ArrCreater.printArr(arr1);
		System.out.println("arr2:");
		ArrCreater.printArr(arr2);
		return new int[][] { arr1, arr2 };
	}

	public int[] combinArr(int arr1[], int[] arr2) {

		int[] result = new int[arr1.length + arr2.length];
		int index1 = 0, index2 = 0;
		for (int i = 0; i < result.length; i++) {

			if (index1 < arr1.length && index2 < arr2.length) {

				if (arr1[index1] < arr2[index2]) {
					result[i] = arr1[index1];
					index1++;
				} else {
					result[i] = arr2[index2];
					index2++;
				}
			} else {

				if (index1 >= arr1.length) {
					result[i] = arr2[index2];
					index2++;
				} else

				if (index2 >= arr2.length) {
					result[i] = arr1[index1];
					index1++;
				}
			}

		}

		return result;
	}

	public static void main(String args[]) {

		int[] arr = ArrCreater.create(13);
		System.out.println("#############origin:");
		ArrCreater.printArr(arr);

		combinSort c = new combinSort();
		arr = c.sort(arr);
		System.out.println("#############result:");
		ArrCreater.printArr(arr);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值