归并排序 java

package MergeSort;
/**
 * 归并排序
 * @author root
 *
 */
public class MergeSort {
	
	static int[] data = {0,2,4,5,3,1,7,6};
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		sort(data, 1, data.length-1);
		print(data);
	}
	//二路归并算法
	public static void sort(int[] data, int low, int high){
		if(low<high){
			int mid = (low+high)/2;
			sort(data, low, mid);
			sort(data, mid+1, high);
			merge(data, low, mid, high);
		}
	}
	//归并两个数组,将data中data[i]-data[m]和data[m+1]-data[n]归并到target
	public static void merge(int[] data, int low, int mid, int high){
		if(low==high){
			return;
		}
		int[] target = new int[high-low+1];
		int i=low;
		int j=mid+1;
		int k=0;
		
		while(i<=mid && j<=high){
			if(data[i]<=data[j]){
				target[k++] = data[i++];
			}else{
				target[k++] = data[j++];
			}
		}
		while(i<=mid){
			target[k++] = data[i++];
		}
		while(j<=high){
			target[k++] = data[j++];
		}
		for(i=0,j=low; i<target.length; i++,j++){
			data[j]=target[i];
		}
	}
	
	public static void print(int[] data){
		for(int i=1; i<data.length; i++){
			System.out.print(data[i]);
		}
		System.out.println();
	}
}

原文地址:https://www.cnblogs.com/yan456jie/p/5369404.html