【基础算法】- 2路归并排序

import java.util.Arrays;


public class MergeSort {

	public static void main(String[] args) {
		
		MergeSort sort = new MergeSort();
		int[] a = {2,4,3,1,0,9,5,6,3,7};
		int[] r = sort.sort(a);
		for(int i = 0 ; i < r.length ; i++){
			System.out.println(r[i]);
		}
	}
	
	private int[] sort(int[] a){
		
		if(a.length == 1) return a;
		else{
			int center = a.length / 2;
			int[] left = Arrays.copyOfRange(a, 0, center);
			int[] right = Arrays.copyOfRange(a, center, a.length);
			int[] leftResult = sort(left);
			int[] rightResult = sort(right);
			return merge(leftResult,rightResult);
		}
	}
	
	private int[] merge(int[] a , int[] b){
		
		int[] c = new int[a.length + b.length];
		int count = 0 , i = 0 , j = 0;
		for(; i < a.length && j < b.length ;){
			c[count++] = a[i] < b[j] ? a[i++] : b[j++];
		}
		int size = a.length - i > 0 ? a.length - i : b.length - j;
		boolean sign = a.length - i > 0 ? true : false;
		if(size > 0){
			if(sign){
				for(int k = count ; k < c.length ;){
					c[k++] = a[i++]; 
				}
			}else{
				for(int k = count ; k < c.length ;){
					c[k++] = b[j++]; 
				}
			}
		}
		return c;
	}
}
原文地址:https://www.cnblogs.com/lixusign/p/3352535.html